Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
prog:symfony:formulaires:use_form [15/09/2022 17:15]
thierry
prog:symfony:formulaires:use_form [16/09/2022 15:39] (Version actuelle)
thierry [Exemple]
Ligne 2: Ligne 2:
 ===== Exemple ===== ===== Exemple =====
 <code php> <code php>
-    ​public function ​index(): Response+<?php 
 + 
 +namespace App\Controller;​ 
 + 
 +use App\Entity\GTicket;​ 
 +use App\Form\GTicketFormType;​ 
 +use Doctrine\ORM\EntityManagerInterface;​ 
 +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;​ 
 +use Symfony\Component\HttpFoundation\Request;​ 
 +use Symfony\Component\HttpFoundation\Response;​ 
 +use Symfony\Component\Routing\Annotation\Route;​ 
 + 
 +class RegTicketController extends AbstractController 
 +
 +    private $entityManager;​ 
 + 
 +    ​public function ​__construct(EntityManagerInterface $entityManager)
     {     {
-        $ticket ​new GTicket(); // Création d'une entity pour le formulaire +        $this->​entityManager ​$entityManager; 
-        ​$form = $this->createForm(GTicketFormType::​class,$ticket); // Création ​du formulaire+    } 
 + 
 +    ​/** 
 +    * Route a appeler en cas de succés, doit etre avant la route app_ticket_reg,​  
 +    * sinon c'est la route app_ticket_reg qui est affichée 
 +     * @Route("/​ticket/​ok",​ name="​app_ticket_success"​) 
 +     */ 
 +    public function success(): Response 
 +    { 
 +        ​return ​$this->render('​RegTicket/​success.html.twig'​[]); 
 +    } 
 + 
 +    /** 
 +     * @Route("/​ticket/​{num}",​ name="​app_ticket_reg"​) 
 +     */ 
 +    public function index(string $num, Request $request): Response 
 +    { 
 +        ​// Création ​de l'​objet vide a remplir avec le formulaire 
 +        $ticket = new GTicket();
         ​         ​
 +        // Création du formulaire
 +        $form = $this->​createForm(GTicketFormType::​class,​$ticket);​
 +        ​
 +        // Note : Le formlaire de class GTicketFormType à été créé avec la commande ​
 +        // -> symfony console make:form GTicketFormType GTicket
 +        ​
 +        // On rattache la requête http au formulaire pour qu'il puisse y récupérer des infos
 +        $form->​handleRequest($request);​
 +        ​
 +        // Suivant ce qu'il a récuperé comme info depuis la requete
 +        // on voit si le formulaire a été soumis depuis la page précédente ​ -> $form->​isSubmitted() ​
 +        // et si les réponse sont valide -> $form->​isValid()
 +        if ($form->​isSubmitted() && $form->​isValid())
 +        {
 +            // enregistrement du ticket dans la base de donnée, via l'​entityManager
 +            $this->​entityManager->​persist($ticket);​
 +            $this->​entityManager->​flush();​
 +
 +            // on redirige vers la page "​success"​
 +            return $this->​redirectToRoute('​app_ticket_success',​[]);​
 +        }
 +        ​
 +        // Si le formulaire n'a pas été soumis ou si il n'est pas valide, on le re-affiche.
         return $this->​render('​RegTicket/​index.html.twig',​ [         return $this->​render('​RegTicket/​index.html.twig',​ [
-            '​form'​=>​ $form->​createView() ​// Passage du formulaire au template+            ​'​num'​ => $num, 
 +            ​'​form'​=>​ $form->​createView()
         ]);         ]);
     }     }
  
-</​code>​+}
  
 +</​code>​