diff --git a/src/Controller/ProjectController.php b/src/Controller/ProjectController.php index 81a7e0d..356e74c 100644 --- a/src/Controller/ProjectController.php +++ b/src/Controller/ProjectController.php @@ -7,6 +7,7 @@ use App\Entity\ProjectEntity; use App\Form\Project\ProjectAddForm; use Symfony\Component\Routing\Exception\ResourceNotFoundException; +use App\Form\Project\ProjectEditForm; class ProjectController extends AbstractExtendedController { @@ -75,8 +76,33 @@ throw new ResourceNotFoundException(); } + // Project edit form + /** @var ProjectEditForm $projectEditForm */ + $projectEditForm = $this->createNamedCustomForm('projectEdit', ProjectEditForm::class); + $projectEditForm->handleRequest($request); + if($projectEditForm->isSubmitted() && $projectEditForm->isValid()) { + $errors = $projectEditForm->validate(); + if (empty($errors)) { + $projectEditForm->updateProject($project); + $entityManager->persist($project); + $entityManager->flush(); + + return $this->ajaxFormAnswer([ + 'refresh' => true, + ]); + } + return $this->ajaxFormAnswer([ + 'error' => join('
', $errors), + 'code' => Response::HTTP_BAD_REQUEST, + ]); + } + + // Update form + $projectEditForm->updateFields($project); + return $this->render("project/project.html.twig", [ 'project' => $project, + 'projectEditForm' => $projectEditForm, ]); } } \ No newline at end of file diff --git a/src/Form/Project/ProjectEditForm.php b/src/Form/Project/ProjectEditForm.php new file mode 100644 index 0000000..37fcf76 --- /dev/null +++ b/src/Form/Project/ProjectEditForm.php @@ -0,0 +1,68 @@ +form->setData([ + 'name' => $project->getName(), + 'active' => $project->getActive(), + ]); + + return $this; + } + + /** + * Update entity from form data + * + * @param ProjectEntity $project + * @return self + */ + public function updateProject(ProjectEntity $project): self + { + $data = $this->form->getData(); + + $project->setName($data['name']); + $project->setActive($data['active']); + + return $this; + } + + /** + * + * {@inheritdoc} + */ + public function getTemplate(): string + { + return '_includes/html/form/project/edit.html.twig'; + } + + /** + * + * {@inheritdoc} + */ + protected function addFields($formBuilder, $options): void + { + $formBuilder->add('name', TextType::class, [ + 'required' => true + ]) + ->add('active', CheckboxType::class, [ + 'required' => false + ]) + ->add('submit', SubmitType::class); + } +} \ No newline at end of file diff --git a/templates/_includes/html/form/project/edit.html.twig b/templates/_includes/html/form/project/edit.html.twig new file mode 100644 index 0000000..a46c399 --- /dev/null +++ b/templates/_includes/html/form/project/edit.html.twig @@ -0,0 +1,13 @@ +{{ form_start(form, {attr: {class: 'ajax-form'}}) }} +
+ {{ form_label(form.name, 'Nom', {label_attr: {class: 'input-text-label'}}) }} + {{ form_widget(form.name, {attr: {class: 'w-100'}}) }} +
+
+ {{ form_widget(form.active) }} + {{ form_label(form.active, 'Actif') }} +
+{{ form_widget(form.submit, {attr: {class: 'w-100'}, label: 'Enregistrer'}) }} +

+

+{{ form_end(form) }} \ No newline at end of file diff --git a/templates/project/project.html.twig b/templates/project/project.html.twig index e747c36..98daeb7 100644 --- a/templates/project/project.html.twig +++ b/templates/project/project.html.twig @@ -11,6 +11,7 @@

Editer

+ {% include '_includes/html/genericForm.html.twig' with {'form': projectEditForm} only %}