Gestion des formulaires : faut-il créer des FormHandler pour alléger nos contrôleurs ?
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 :D
Je me permets de vous poster un petit exemple simplifié pour illustrer mes propos.
App\Controller\ContactController
Code:
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()
]);
} |
App\FormHandler\ContactHandler
Code:
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();
}
} |
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...
Tous les avis seront les bienvenus !
Merci d'avance,
PhiMau