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 :

[Symfony 2]Problème Vaidation Formulaire [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2011
    Messages : 6
    Par défaut [Symfony 2]Problème Vaidation Formulaire
    Bonjour à tous.

    J'utilise Symfony 2 et crée un formulaire via le FormBuilder.

    Voici mes formulaires:

    AmiAttrbType.php
    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
     
    <?php
     
    namespace Site\TestBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;
     
    class AmiAttrbType extends AbstractType
    {
     
        /**
         * @param FormBuilderInterface $builder
         * @param array $options
         */
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('email','text', array(
                    'required' => true,
                    'attr' => array(
                    'placeholder' => 'Adresse Mail'
                )))
                ->add('produitsAttrb','collection', array(
                    'type' => new ProduitAttrbType()
                ));
        }
     
        /**
         * @param OptionsResolverInterface $resolver
         */
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'Site\TestBundle\Entity\Ami'
            ));
        }
     
        /**
         * @return string
         */
        public function getName()
        {
            return 'site_testbundle_amiAttrb';
        }
    }
    ProduitAttrbType.php
    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
     
    <?php
     
    namespace Site\TestBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;
     
    class ProduitAttrbType extends AbstractType
    {
     
            /**
         * @param FormBuilderInterface $builder
         * @param array $options
         */
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
     
                $builder
                    ->add('nom', 'hidden')
                    ->add('qte','integer', array(
                    'required' => true
                    ));
        }
     
        /**
         * @param OptionsResolverInterface $resolver
         */
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'Site\TestBundle\Entity\ProduitAttrb'
            ));
        }
     
        /**
         * @return string
         */
        public function getName()
        {
            return 'site_testbundle_produitAttrb';
        }
    }
    controller.php

    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
     
    public function attrbAction(Event $commande)
    {   
       $ami = new Ami;
     
       foreach($commande->getProduits() as $produit)
       {
          $ami->addProduitsAttrb(new ProduitAttrb($produit->getNom(),0));
       }
     
       $form = $this->createForm(new AmiAttrbType(),$ami);
     
     
       $request = $this->get('request');
     
       if( $this->get('request')->getMethod() == 'POST' )
       {  
           $form->bind($request);
     
           if ($form->isValid())
           {
     
               $commande->addAmi($ami);
     
               $em = $this->getDoctrine()->getManager();
               $em->merge($commande);
     
               $em->flush();
     
            return $this->render('SiteTestBundle:Test:attrb.html.twig', array('commande' =>$commande, 'form' => $form->createView()));
          }
       } 
     
        return $this->render('SiteTestBundle:Test:attrb.html.twig', array('commande' =>$commande, 'form' => $form->createView()));
    }
    attrb.html.twig:
    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
     
    <tr>
        <td  class="attrb-new">
            <div class="row">
                <div class="col-xs-12">
                   {{ form_widget(form.email) }}
                 </div>
            </div>
        </td>
        {% for produit in form.produitsAttrb %}
              <td class="attrb-newQte">
                {{ form_widget(produit.qte) }}
               </td>
         {% endfor %}
        {{ form_rest(form) }}
    </tr>
    La je rencontre deux problèmes.

    Le premier, lorsque je saisie l'adresse email dans l'input prévu à cet effet et que je valide. Cela ne fonctionne pas. En regardant dans le profiler, il est indiqué que j'ai deux erreurs: email et token sont null alors que j'ai bien saisie mon email et que le token devrait être renseigné par form_rest.

    Mon deuxième soucis, et c'est plutôt une question, en fait j'aimerai tout simplement que le champs "nom" de mon ProduitAttrbType soit pré-rempli par le nom des produits. Chose que je pensais faire dans mon controller avec cette boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($commande->getProduits() as $produit)
    {
    $ami->addProduitsAttrb(new ProduitAttrb($produit->getNom(),0));
    }
    Mais cela ne semble pas fonctionner. Ou peut-etre que cela ne fonctionne pas parce que mon bind ou handleRequest ne fonctionne pas.
    Je n'ai pas encore le moyen de le vérifier.


    J'ai vu dans certain cas qu'il fallait utiliser

    $form->handleRequest($request);

    Si je me cela à la place de $form->bind($request) il ne se passe plus rien, plus de validation.

    Ma requete renvoyé par le HandleRequest est vide. On dirait qu'il ne se passe rien. J'ai bien un "1" vert qui indique qu'il n'y a pas d'erreur, mais aucun enregistrement en BDD.
    A contrario, si j'utilise bind, j'ai un "2" rouge qui indique que "Email" et "CSRF" sont invalide.
    Chose bizarre, j'utilise bien une version supérieur à 2.3 mais bind à jusqu'à ce jour toujours fonctionné dans mes autres formulaires.
    Le token apparait bien dans le code de ma page en regardant avec Firebug.
    Alors, autre chose bizarre, si je remplace HandleRequest par bind et que je supprime cette partie dans twig.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    {% for produit in form.produitsAttrb %}
    <td class="attrb-newQte">
    {{ form_widget(produit.qte) }}
    </td>
    {% endfor %}
    L'enregistrement se fait bien en bdd.
    il semblerait donc que ce soit cette partie qui pose probléme mais je n'arrive pas à comprendre quoi. J'ai utilisé comme exemple ce qui est décrit dans cette page
    http://symfony.com/fr/doc/current/co...llections.html

    Merci beaucoup pour votre aide.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2011
    Messages : 6
    Par défaut Merci pour votre aide
    lol

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

Discussions similaires

  1. [IIS - TOMCAT][Struts] Problème de formulaire
    Par tscoops dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 01/02/2005, 14h04
  2. Réponses: 7
    Dernier message: 19/10/2004, 16h12
  3. [STRUTS] problème de formulaire
    Par ultimax dans le forum Struts 1
    Réponses: 5
    Dernier message: 09/07/2004, 15h55
  4. [Struts] Problème de formulaire(s) ...
    Par djoukit dans le forum Struts 1
    Réponses: 8
    Dernier message: 10/03/2004, 23h48
  5. Réponses: 12
    Dernier message: 24/09/2003, 15h26

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