Bonjour,
Je débute avec SF2 et je cherche à faire mon premier formulaire (de contact, mais je n'en suis pas encore à envoyer des mails). J'essaie de suivre essentiellement la doc officielle (site Symfony2 donc). La version de SF2 sur laquelle je travaille est la 2.4.1.
Voici mes fichiers :
Le contrôleur :
L'entité :
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 // src/Open/OpcBundle/Controller/OpcController.php namespace Open\OpcBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Request; use Open\OpcBundle\Entity\Contact; use Open\OpcBundle\Form\Type\ContactType; public function contactAction(Request $request) { $contact = new Contact(); $form = $this->createForm(new ContactType(), $contact); $form->handleRequest($request); if ($form->isValid()) { return $this->redirect($this->generateUrl('contact_success')); } return $this->render("OpenOpcBundle:Opc:contact.html.twig", array("form" => $form->createView())); } }
Ma classe FormType :
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 <?php // src/Open/OpcBundle/Entity/Contact.php namespace Open\OpcBundle\Entity; class Contact { protected $nom; protected $courriel; protected $commune; protected $sujet; protected $msg; public function getNom() { return $this->nom; } public function setNom($nom) { $this->name = $nom; } public function getCourriel() { return $this->courriel; } public function setCourriel($courriel) { $this->courriel = $courriel; } public function getSujet() { return $this->sujet; } public function setSujet($sujet) { $this->sujet = $sujet; } public function getMsg() { return $this->msg; } public function setMsg($msg) { $this->message = $message; } }
Le template contact.twig.html :
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 <?php # src/Open/OpcBundle/Form/Type/ContactType.php namespace Open\OpcBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; class ContactType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('contact'); $builder->add('nom', 'text', array('max_length' => 30, 'label' => 'Prénom, nom*', 'trim' => true, 'attr' => array('size'=>'30'))) ->add('courriel', 'email', array('max_length' => 255, 'label' => 'Adresse email*', 'trim' => true, 'attr' => array('size'=>'30'))) ->add('sujet', 'text', array('max_length' => 255, 'label' => 'Objet*', 'trim' => true, 'attr' => array('size'=>'30'))) ->add('msg', 'textarea', array('attr' => array('rows' => '10','cols' => '80'))) ->add('submit', 'submit'); } public function getName() { return "Contact"; } }
Route pour contact :
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 {% extends "OpenOpcBundle:Opc:layout.html.twig" %} {% block main %} <h1>Contact</h1> {{ form_start(form) }} {{ form_errors(form) }} <p>{{ form_label(form.nom) }}{{ form_widget(form.nom) }} </p> {{ form_errors(form.nom) }} <p>{{ form_label(form.courriel) }} {{ form_widget(form.courriel) }}</p> {{ form_errors(form.courriel) }} <p>{{ form_label(form.sujet) }} {{ form_widget(form.sujet) }}</p> {{ form_errors(form.sujet) }} <p>{{ form_label(form.msg) }} {{ form_widget(form.msg) }}</p> {{ form_errors(form.msg) }} <p class="txtcenter">{{ form_widget(form.submit, { 'label': 'Envoyer' }) }}</p> {{ form_end(form) }} {% endblock main %}
Un fichier validation.yml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 open_opc_contact: pattern: /contact defaults: { _controller: OpenOpcBundle:Opc:contact } requirements: _method: POST
Dans le fichier app/config/config.yml, j'ai activé le yaml :
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 # Open/OpcBundle/Resources/config/validation.yml Open\OpcBundle\Entity\Contact: properties: nom: - NotBlank: ~ message: Le champ Prénom, nom n'est pas renseigné. - Type: type: alpha message: Le champ Prénom, nom n'est pas renseigné. courriel: - Email: message: '{{ value }}' n'est pas une adresse email valide. sujet: - NotBlank: ~ message: Le champ Sujet n'est pas renseigné. msg: - NotBlank: ~ message: Le champ Message n'est pas renseigné.
Dans ces 2 derniers fichiers YAML j'ai bien veillé à l'indentation de 4 espaces (je précise car cela n'apparaît bien pas sur ce post).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 framework: # validation: { enable_annotations: true } validation: { enabled: true }
Je rencontre 2 problèmes :
- Problème 1 : j'ai le message d'erreur Variable "form" does not exist in OpenOpcBundle:Opc:contact.html.twig at line 6.
- Problème 2 : avant d'avoir le message d'erreur du problème 1, le profiler indiquait que le formulaire n'était pas soumis (menu > forms) pourtant dans menu > requests les données sont postées. J'ai aussi noté dans le profiler que le jeton CSRF est invalide.
Merci de votre aide.
Partager