From 4e299630b684db777a703424050209873c37f0dc Mon Sep 17 00:00:00 2001 From: Julien Rosset Date: Fri, 30 May 2025 17:31:10 +0200 Subject: [PATCH] Add controller for material types --- .../Config/MaterialTypeController.php | 89 +++++++++++++++++++ src/Form/Config/MaterialTypeEditForm.php | 45 ++++++++++ templates/Config/MaterialType/Edit.html.twig | 8 ++ templates/Config/MaterialType/List.html.twig | 62 +++++++++++++ templates/Core/Main.html.twig | 13 ++- 5 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 src/Controller/Config/MaterialTypeController.php create mode 100644 src/Form/Config/MaterialTypeEditForm.php create mode 100644 templates/Config/MaterialType/Edit.html.twig create mode 100644 templates/Config/MaterialType/List.html.twig diff --git a/src/Controller/Config/MaterialTypeController.php b/src/Controller/Config/MaterialTypeController.php new file mode 100644 index 0000000..e6b6e51 --- /dev/null +++ b/src/Controller/Config/MaterialTypeController.php @@ -0,0 +1,89 @@ +entityManager = $entityManager; + $this->materialTypeRepository = $materialTypeRepository; + } + + /** + * List of material types + * + * @return Response The response + */ + #[Route('/', name: 'config_materialType_list', alias: 'config_materialType')] + public function list (): Response { + return $this->render( + 'Config/MaterialType/List.html.twig', + [ + 'materialTypes' => $this->materialTypeRepository->findAll(), + ] + ); + } + + /** + * Edit/Create a material type + * + * @return Response The response + */ + #[Route('/Create', name: 'config_materialType_create')] + #[Route('/Edit-{id}', name: 'config_materialType_edit')] + public function edit (Request $request, ?MaterialType $materialType = null): Response { + $materialType ??= new MaterialType(); + + $form = $this->createForm(MaterialTypeEditForm::class, $materialType); + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + $this->entityManager->persist($materialType); + $this->entityManager->flush(); + + $this->addFlash(FlashType::SUCCESS, 'Le type de matériau a bien été enregistré.'); + return $this->redirectToRoute('config_materialType_list'); + } + + return $this->render('Config/MaterialType/Edit.html.twig', [ + 'form' => $form->createView(), + ]); + } + + /** + * Delete a material type + * + * @return Response The response + */ + #[Route('/Delete-{id}', name: 'config_materialType_delete')] + public function delete (MaterialType $materialType): Response { + $this->entityManager->remove($materialType); + $this->entityManager->flush(); + + $this->addFlash(FlashType::SUCCESS, 'Le type de matériau a bien été supprimé.'); + return $this->redirectToRoute('config_materialType_list'); + } +} diff --git a/src/Form/Config/MaterialTypeEditForm.php b/src/Form/Config/MaterialTypeEditForm.php new file mode 100644 index 0000000..020bee4 --- /dev/null +++ b/src/Form/Config/MaterialTypeEditForm.php @@ -0,0 +1,45 @@ +setDefaults( + [ + 'data_class' => MaterialType::class, + ] + ); + } + + /** + * @inheritDoc + */ + public function buildForm (FormBuilderInterface $builder, array $options): void { + $builder + ->add('name', null, [ + 'label' => 'Nom', + ]) + ->add('stackName', null, [ + 'label' => 'Nom de la pile', + ]) + ->add('stackSize', null, [ + 'label' => 'Taille de la pile', + ]) + ->add('submit', SubmitType::class, [ + 'label' => 'Enregistrer', + ]); + } +} \ No newline at end of file diff --git a/templates/Config/MaterialType/Edit.html.twig b/templates/Config/MaterialType/Edit.html.twig new file mode 100644 index 0000000..765bc3e --- /dev/null +++ b/templates/Config/MaterialType/Edit.html.twig @@ -0,0 +1,8 @@ +{% extends 'base.html.twig' %} + +{% block title %}Modification type de matériau - {{ parent() }}{% endblock %} + +{% block mainContent %} +

Modification type de matériau

+ {{ form(form) }} +{% endblock %} diff --git a/templates/Config/MaterialType/List.html.twig b/templates/Config/MaterialType/List.html.twig new file mode 100644 index 0000000..07fbad6 --- /dev/null +++ b/templates/Config/MaterialType/List.html.twig @@ -0,0 +1,62 @@ +{% extends '/base.html.twig' %} + +{% block title %}Liste des types de matériaux - {{ parent() }}{% endblock %} +{% block importmap %}{{ importmap(['app', 'datatables2']) }}{% endblock %} + +{% block mainContent %} +

Liste des types de matériaux

+
+
+ + + + + + + + + {% for materialType in materialTypes %} + + + + + {% endfor %} + +
Nom + + + +
{{ materialType.name }} + + + + +
+
+
+ + +{% endblock %} \ No newline at end of file diff --git a/templates/Core/Main.html.twig b/templates/Core/Main.html.twig index 0a7fa4e..c77a32b 100644 --- a/templates/Core/Main.html.twig +++ b/templates/Core/Main.html.twig @@ -5,7 +5,18 @@ {% block mainContent %}

Recipe Manager

{% if app.user %} - Bienvenu {{ app.user }} + {% else %}

Bienvenu sur Recipe Manager, le gestionnaire de recette de jeux vidéos.

Merci de vous connecter ou créer un compte pour commencer.