diff --git a/src/Controller/ProjectController.php b/src/Controller/ProjectController.php index 3a67865..faa7ebf 100644 --- a/src/Controller/ProjectController.php +++ b/src/Controller/ProjectController.php @@ -5,6 +5,7 @@ use Symfony\Component\HttpFoundation\Response; use App\Repository\ProjectRepository; use App\Entity\ProjectEntity; +use App\Form\Project\ProjectAddForm; class ProjectController extends AbstractExtendedController { @@ -21,12 +22,35 @@ $entityManager = $this->getDoctrine()->getManager(); /** @var ProjectRepository $projectRepository */ $projectRepository = $entityManager->getRepository(ProjectEntity::class); - + + // Project add form + /** @var ProjectAddForm $projectAddForm */ + $projectAddForm = $this->createNamedCustomForm('projectAdd', ProjectAddForm::class); + $projectAddForm->handleRequest($request); + if ($projectAddForm->isSubmitted() && $projectAddForm->isSubmitted()) { + $errors = $projectAddForm->validate(); + if (empty($errors)) { + $project = $projectAddForm->getProject(); + $entityManager->persist($project); + $entityManager->flush(); + + return $this->ajaxFormAnswer([ + 'refresh' => true, + 'reset' => true + ]); + } + return $this->ajaxFormAnswer([ + 'error' => join('
', $errors), + 'code' => Response::HTTP_BAD_REQUEST + ]); + } + // Get projects $projects = $projectRepository->findAll(); - + return $this->render("project/projects.html.twig", [ 'projects' => $projects, + 'projectAddForm' => $projectAddForm ]); } } \ No newline at end of file diff --git a/src/Form/Project/ProjectAddForm.php b/src/Form/Project/ProjectAddForm.php new file mode 100644 index 0000000..ea52b8c --- /dev/null +++ b/src/Form/Project/ProjectAddForm.php @@ -0,0 +1,48 @@ +form->getData(); + + $project = new ProjectEntity(); + $project->generateId(); + $project->setName($data['name']); + $project->setActive(true); + + return $project; + } + + /** + * + * {@inheritdoc} + */ + public function getTemplate(): string + { + return '_includes/html/form/project/add.html.twig'; + } + + /** + * + * {@inheritdoc} + */ + protected function addFields($formBuilder, $options): void + { + $formBuilder->add('name', TextType::class, [ + 'required' => true + ])->add('submit', SubmitType::class); + } +} \ No newline at end of file diff --git a/templates/_includes/html/form/project/add.html.twig b/templates/_includes/html/form/project/add.html.twig new file mode 100644 index 0000000..47e4223 --- /dev/null +++ b/templates/_includes/html/form/project/add.html.twig @@ -0,0 +1,9 @@ +{{ 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.submit, {attr: {class: 'w-100'}, label: 'Nouveau projet'}) }} +

+

+{{ form_end(form) }} \ No newline at end of file diff --git a/templates/project/projects.html.twig b/templates/project/projects.html.twig index 9602e2d..68c4b15 100644 --- a/templates/project/projects.html.twig +++ b/templates/project/projects.html.twig @@ -20,6 +20,7 @@

Nouveau projet

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