Bonjour à tous,
J'ai pu lire sur d'anciens tutoriels / documentation, qu'il était possible de créer des FormHandler afin de déléguer le traitement des formulaires sur Symfony.
J'ai moi-même mis en place cette technique sur certains projets, mon but principal étant d'alléger le ou les controllers au maximum...
Cependant j'aimerai l'avis de personnes avisées concernant cette méthode, est-ce une bonne pratique ou non sur la dernière version de Symfony ?
Je me pose la question car je ne vois rien à ce sujet sur la documentation récente.
En fait je me retrouve parfois avec des actions de controleurs, qui doivent gérer 3 ou 4 formulaires sur la même vue... On se retrouve donc rapidement avec des dizaines de lignes c'est pourquoi l'idée d'un FormHandler me séduit
Je me permets de vous poster un petit exemple simplifié pour illustrer mes propos.
App\Controller\ContactController
App\FormHandler\ContactHandler
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 /** * @Route("/contact/{contact_id}", name="edit_contact") */ public function editContact(Request $request) { $form = $this->createForm(ContactType::class, new Contact(), array( 'action' => $this->generateUrl('admin_client_contact', array('contact_id' => $contact->getId())) )); $entityManager = $this->getDoctrine()->getManager(); $contactHandler = new ContactHandler($form, $request, $entityManager); if ($contactHandler->process()) { return $this->redirectToRoute('liste_contacts'); } return $this->render('contact.html.twig', [ 'form' => $contactHandler->getForm()->createView() ]); }
Aujourd'hui je me retrouve avec ce problème, car je souhaite gérer 4 ou 5 formulaires pour certains quasi-identiques sur la même vue...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 class ContactHandler { protected $request; protected $form; protected $mailer; /** * @param Form $form * @param Request $request * @param EntityManagerInterface $entityManager * */ public function __construct(Form $form, Request $request, EntityManagerInterface $entityManager) { $this->form = $form; $this->request = $request; $this->entityManager = $entityManager; } /** * Process form * * @return boolean */ public function process() { $this->form->handleRequest($this->request); if ($this->form->isSubmitted() && $this->form->isValid()) { $this->onSuccess(); return true; } return false; } /** * Get form * * @return */ public function getForm() { return $this->form; } /** * Persist on success */ protected function onSuccess() { $this->entityManager->persist($this->form->getData()). $this->entityManager->flush(); } }
Tous les avis seront les bienvenus !
Merci d'avance,
PhiMau
Partager