Différences

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

Lien vers cette vue comparative

Prochaine révision
Révision précédente
prog:symfony:formulaires:use_form [15/09/2022 17:13]
thierry créée
prog:symfony:formulaires:use_form [16/09/2022 15:39] (Version actuelle)
thierry [Exemple]
Ligne 1: Ligne 1:
 ====== Utilisation d'un Formulaire ====== ====== Utilisation d'un Formulaire ======
 +===== Exemple =====
 +<code php>
 +<?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)
 +    {
 +        $this->​entityManager = $entityManager;​
 +    }
 +
 +    /**
 +    * 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',​ [
 +            '​num'​ => $num,
 +            '​form'​=>​ $form->​createView()
 +        ]);
 +    }
 +
 +}
 +
 +</​code>​