Przeglądaj źródła

Ajout formulaires

Francois DROUHARD 901 2 miesięcy temu
rodzic
commit
4b7b58b2b7

+ 2 - 2
config/packages/translation.yaml

@@ -1,7 +1,7 @@
 framework:
-    default_locale: en
+    default_locale: fr
     translator:
         default_path: '%kernel.project_dir%/translations'
         fallbacks:
-            - en
+            - fr
         providers:

+ 20 - 4
src/Controller/IndexController.php

@@ -2,19 +2,35 @@
 
 namespace App\Controller;
 
+use App\Entity\Film;
+use App\Form\FilmType;
 use App\Repository\FilmRepository;
 use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\HttpFoundation\RedirectResponse;
+use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\Routing\Attribute\Route;
 
 class IndexController extends AbstractController
 {
-    #[Route('/', name: 'app_index')]
-    public function index(FilmRepository $filmRepository): Response
+    #[Route('/', name: 'app_index', methods: ['GET', 'POST'])]
+    public function index(Request $request, FilmRepository $filmRepository): Response
     {
-        $filmRepository->findAll();
+        $film = new Film();
+        $form = $this->createForm(FilmType::class, $film);
+        $films = $filmRepository->findAll();
+
+        $form->handleRequest($request);
+
+        if ($form->isSubmitted() && $form->isValid()) {
+            $filmRepository->save($film, true);
+
+            return $this->redirectToRoute('app_index', [], RedirectResponse::HTTP_SEE_OTHER);
+        }
+
         return $this->render('index/index.html.twig', [
-            'films' => 'films',
+            'films' => $films,
+            'form' => $form
         ]);
     }
 }

+ 45 - 0
src/Form/FilmType.php

@@ -0,0 +1,45 @@
+<?php
+
+namespace App\Form;
+
+use App\Entity\Film;
+use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\Extension\Core\Type\TextType;
+use Symfony\Component\Form\FormBuilderInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
+
+class FilmType extends AbstractType
+{
+    public function buildForm(FormBuilderInterface $builder, array $options): void
+    {
+        $builder
+            ->add('name', TextType::class, [
+                'label' => false,
+                'attr' => [
+                    'placeholder' => 'Name'
+                ]
+            ])
+            ->add('realisateur', TextType::class, [
+                'label' => false,
+                'required' => false,
+                'attr' => [
+                    'placeholder' => 'Realisateur'
+                ]
+            ])
+            ->add('genre', TextType::class, [
+                'label' => false,
+                'required' => false,
+                'attr' => [
+                    'placeholder' => 'Genre'
+                ]
+            ])
+        ;
+    }
+
+    public function configureOptions(OptionsResolver $resolver): void
+    {
+        $resolver->setDefaults([
+            'data_class' => Film::class,
+        ]);
+    }
+}

+ 16 - 0
src/Repository/FilmRepository.php

@@ -16,6 +16,22 @@ class FilmRepository extends ServiceEntityRepository
         parent::__construct($registry, Film::class);
     }
 
+    public function save(Film $film, bool $flush = false): void
+    {
+        $this->getEntityManager()->persist($film);
+        if ($flush) {
+            $this->getEntityManager()->flush();
+        }
+    }
+
+    public function remove(Film $film, bool $flush = false): void
+    {
+        $this->getEntityManager()->remove($film);
+        if ($flush) {
+            $this->getEntityManager()->flush();
+        }
+    }
+
     //    /**
     //     * @return Film[] Returns an array of Film objects
     //     */

+ 3 - 1
templates/base.html.twig

@@ -13,6 +13,8 @@
         {% endblock %}
     </head>
     <body>
-        {% block body %}{% endblock %}
+        <main class="container">
+            {% block body %}{% endblock %}
+        </main>
     </body>
 </html>

+ 10 - 0
templates/form/_form.film.html.twig

@@ -0,0 +1,10 @@
+{{ form_start(form) }}
+
+<fieldset class="grid">
+{{ form_rest(form) }}
+<div>
+<input type="submit" id="submit">
+</div>
+</fieldset>
+
+{{ form_end(form) }}

+ 5 - 2
templates/index/index.html.twig

@@ -3,6 +3,9 @@
 {% block title %}Films{% endblock %}
 
 {% block body %}
+
+{{ include('form/_form.film.html.twig') }}
+
 <table>
     <thead>
         <tr>
@@ -12,13 +15,13 @@
         </tr>
     </thead>
     <tbody>
-        <tr>
         {% for film in films %}
+        <tr>
             <td>{{ film.name }}</td>
             <td>{{ film.realisateur }}</td>
             <td>{{ film.genre }}</td>
-        {% endfor %}
         </tr>
+        {% endfor %}
     </tbody>
 </table>
 {% endblock %}

+ 3 - 0
translations/messages.fr.yml

@@ -0,0 +1,3 @@
+Name: Nom
+Realisateur: Réalisateur
+Genre: Genre