Différences
Ci-dessous, les différences entre deux révisions de la page.
| 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:18] thierry [Exemple] |
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) | ||
| + | { | ||
| + | $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 | ||
| { | { | ||
| - | $ticket = new GTicket(); // Création d'une entity pour le formulaire | + | // Création de l'objet vide a remplir avec le formulaire |
| - | $form = $this->createForm(GTicketFormType::class,$ticket); // Création du 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 | // Note : Le formlaire de class GTicketFormType à été créé avec la commande | ||
| // -> symfony console make:form GTicketFormType GTicket | // -> 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> | ||