Dans les bonnes pratiques, j'ai relevé le Handler qui nous permet de récupérer le formulaire, de le traiter tout ça hors contrôleur (comme le ferai un service mais mieux qu'un service car pas besoin de le déclarer dans config).
l'exemple, récuperation d'information d'un form (mail, sujet, message) pour envoyer un email
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 <?php # src/tuto/WelcomeBundle/Form/Handler/ContactHandler.php namespace tuto\WelcomeBundle\Form\Handler; use Symfony\Component\Form\Form; use Symfony\Component\HttpFoundation\Request; /** * The ContactHandler. * Use for manage your form submitions * * @author Vincent Paulin */ class ContactHandler { protected $request; protected $form; protected $mailer; /** * Initialize the handler with the form and the request * * @param Form $form * @param Request $request * @param $mailer * */ public function __construct(Form $form, Request $request, $mailer) { $this->form = $form; $this->request = $request; $this->mailer = $mailer; } /** * Process form * * @return boolean */ public function process() { // Check the method if ('POST' == $this->request->getMethod()) { // Bind value with form $this->form->bindRequest($this->request); $data = $this->form->getData(); $this->onSuccess($data); return true; } return false; } /** * Send mail on success * * @param array $data * */ protected function onSuccess($data) { $message = \Swift_Message::newInstance() ->setContentType('text/html') ->setSubject($data['subject']) ->setFrom($data['email']) ->setTo('xxxxxx@gmail.com') ->setBody($data['content']); $this->mailer->send($message); } }
dans le controleur
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 public function indexAction() { $form = $this->get('form.factory')->create(new ContactType()); // Get the request $request = $this->get('request'); // Get the handler $formHandler = new ContactHandler($form, $request, $this->get('mailer')); $process = $formHandler->process(); if ($process) { // Launch the message flash $this->get('session')->setFlash('notice', 'Merci de nous avoir contacté, nous répondrons à vos questions dans les plus brefs délais.'); } ....
donc à vous, si vous avez de bonne pratique...
Partager