Différences
Ci-dessous, les différences entre deux révisions de la page.
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> | ||