Formulaire non soumis et erreur Variable "form" does not exist dans le template
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 :
Code:
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()));
}
} |
L'entité :
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
|
<?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;
}
} |
Ma classe FormType :
Code:
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";
}
} |
Le template contact.twig.html :
Code:
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 %} |
Route pour contact :
Code:
1 2 3 4 5 6
|
open_opc_contact:
pattern: /contact
defaults: { _controller: OpenOpcBundle:Opc:contact }
requirements:
_method: POST |
Un fichier validation.yml :
Code:
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 le fichier app/config/config.yml, j'ai activé le yaml :
Code:
1 2 3
| framework:
# validation: { enable_annotations: true }
validation: { enabled: true } |
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).
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.