IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Formulaire non soumis et erreur Variable "form" does not exist dans le template [2.x]


Sujet :

Symfony PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 34
    Points
    34
    Par défaut 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 : 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()));
       }  
    }
    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
    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 : 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";
       }
    }
    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
     
    {% 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 : 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
    Un fichier validation.yml :

    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 le fichier app/config/config.yml, j'ai activé le yaml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 34
    Points
    34
    Par défaut Problème résolut
    J'ai trouvé l'erreur, c'est parce qu'il y avait le code suivant dans la route :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        requirements:
            _method: POST
    Je l'ai supprimé et ça a corrigé l'erreur, même si j'ai eu d'autres erreurs ensuite du coup j'ai modifié pas mal mon code (notamment le fichier validation.yml car la syntaxe n'y était pas bonne) et celui exposé ici n'est plus valable.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] Erreur Item "nom_champ_dematable" for "Array" does not exist
    Par tbreton dans le forum Symfony
    Réponses: 5
    Dernier message: 09/06/2011, 15h02
  2. Form Bean does not exist
    Par libuma dans le forum Struts 1
    Réponses: 5
    Dernier message: 18/03/2010, 09h51
  3. Réponses: 1
    Dernier message: 12/11/2007, 16h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo