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> | ||