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 :

Symfony2.2 : Formulaire champs non-reçus après le bind(request) [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Back-End
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Par défaut Symfony2.2 : Formulaire champs non-reçus après le bind(request)
    Bonjour à tous,


    Je viens vous demander un peut d'aide, car malgré mes recherches je ne trouve pas de solution à mon problème.


    Mon problème :

    J'ai un formulaire, que voici :

    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
     
    $form = $this->createFormBuilder()
                ->add('codelogement', 'text', array(
                        'required' => true,
                        'label' => 'local.attribut.codelogement',
                        'data' => $retour
                    )
                )
                ->add('idbatiment', 'choice', array(
                        'required' => true,
                        'choices' => $batiments_list,
                        'label' => 'batiment.label',
                        'empty_value' => 'Sélectionnez une valeur',
                        'empty_data' => null
                    )
                )
                ->add('idescalier', 'choice', array(
                        'label' => 'escalier.label',
                        'empty_value' => 'Sélectionnez une valeur',
                        'empty_data' => null
                    )
                )
                ->add('idetage', 'choice', array(
                        'label' => 'etage.label',
                        'empty_value' => 'Sélectionnez une valeur',
                        'empty_data' => null
                    )
                )
                ->add('idtypelocal', 'entity', array(
                        'class' => 'VitamEntityBundle:TypeLocal',
                        'label' => 'typeLocal.label',
                        'data' => ($local->getIdtypelocal() != null)? $local->getIdtypelocal() : '',
                    )
                )
                ->add('porte', 'text', array(
                        'label' => 'local.attribut.porte',
                        'data' => $local->getPorte(),
                        'required' => false
                    )
                )
                ->add('emplacementactifdisponible', 'checkbox', array(
                        'label' => 'Emplacement actif dispo?',
                        'data' => $local->getEmplacementactifdisponible(),
                        'required' => false
                    )
                )
                ->add('info', 'text', array(
                        'label' => 'local.attribut.info',
                        'data' => $local->getInfo(),
                        'required' => false
                    )
                )
                ->add('codeentree', 'text', array(
                        'label' => 'local.attribut.codeentree',
                        'data' => $local->getCodeentree(),
                        'required' => false
                    )
                )
                ->add('codeascenceur', 'text', array(
                        'label' => 'local.attribut.codeascenceur',
                        'data' => $local->getCodeascenceur(),
                        'required' => false
                    )
                )->getForm();
    Les deux listes (idescalier et idetage), sont rempli par requêtes AJAX avec les Id des objets comme valeur et leur référence en text.


    Lorsque j'envoie mon formulaire (après avoir sélectionné les valeurs de ses deux listes), après le Bind du formulaire je me retrouve avec ces deux valeurs vide....

    Voici mon code de "récupération" (j'ai volontairement enlevé la validation, qui de toutes façons sortais en erreur... :/):

    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
     
    $request = $this->getRequest();
     
            if($request->isMethod('POST')){
                $form->bind($request);
     
                    $data = $form->getData();
     
                    $local->setCodelogement($data['codelogement']);
                    $local->setPorte($data['porte']);
                    $local->setEmplacementactifdisponible($data['emplacementactifdisponible']);
                    $local->setInfo($data['info']);
                    $local->setCodeentree($data['codeentree']);
                    $local->setCodeascenceur($data['codeascenceur']);
                    $local->setIdtypelocal($data['idtypelocal']);
     
     
                    $local->setIdbatiment($em->getRepository('VitamEntityBundle:Batiment')->find($data['idbatiment']));
     
     
                    $local->setIdescalier($em->getRepository('VitamEntityBundle:Escalier')->findOneByIdescalier($form->get('idescalier')->getData()));
                    $local->setIdetage($em->getRepository('VitamEntityBundle:Etage')->findOneByIdetage($form->get('idetage')->getData()));
     
                    $em->persist($local);
     
                    $em->flush();
                    $this->get('session')->getFlashBag()->add('success', 'Les données ont été sauvegardées!');
                    return $this->redirect($this->generateUrl('vitam_site_sonataliste_listlocal', array('idSite' => $site->getIdsite())));
            }
    Je n'ai pas utilisé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $data['idescalier']
    $data['idetage']

    Car quand je le fais, J'ai un message me disant que les index 'idescalier' et 'idetage' ne sont pas définis... :S



    Et voici les données de la requêtes récupéré grâce au Profiler :

    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
     
    Key	Value
    form	
    {
     
    "codelogement":"SI-LC02-ST-CAPP0101",
     
    "idbatiment":"50677",
     
    "idescalier":"51232",
     
    "idetage":"231209",
     
    "idtypelocal":"1",
     
    "porte":"",
     
    "info":"",
     
    "codeentree":"",
     
    "codeascenceur":"",
     
    "_token":"6e99cb7f5c4e4c51d849da6bf14b90b09f549b03"
     
    }
    On vois très bien ici que les champs "idetage" et "escalier" ont bien été envoyé et possède une valeur... alors pourquoi je ne récupère rien :'(



    Je vous remercie d'avance pour toute aide que vous pourrez me donner



    Bien cordialement,



    XuruDragon

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 60
    Par défaut
    Bonjour,

    Peux-tu montrer le code de ton entité ?

  3. #3
    Membre émérite
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Par défaut
    bonsoir

    est ce possible d avoir l action complète aussi ?

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Back-End
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Par défaut
    Bonjour,

    J'ai poster mon problème sur d'autre forum et j'ai même contacter Sensio et aucune solution n'a émergé.

    il semble que c'est peut être dû à ma version de Symfony (2.2). celà dis je me suis débrouillé autrement en réutilisant le bon vieux $_POST avec toute les sécurité qui vont bien, bien entendu.
    C'est un dev pour mon entreprise que je dois livrer pour recettage je ne peux plus me permettre de perdre du temps sur ce problème et je m'occuperais plus tard de faire un truc plus Symfony.

    Donc je clos la discussion, et merci tout de même pour votre intérêt à mon problème.

    Xurudragon

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 19
    Par défaut
    Bonjour, je viens de voir cette discussion, j'arrive un peu tard mais comme je recherchai des infos sur l'objet Request de symfony2, j'ai pu constater qu'il faudrait peut être que tu vérifies non pas que ta requête soit en POST car elle viens de l'AJAX :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if($request->isMethod('POST')){
                $form->bind($request);
    Mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     if( $request->isXmlHttpRequest() )
    {
      // C'est une requête AJAX, retournons du JSON, par exemple
    }
    Enfin je pense...

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Back-End
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Par défaut
    Bojour LeFredd,

    Eh bien non, mon action est bien en POST et non en AJAX.
    Ce qui est en AJAX c'est le remplissage des listes (par "effet d'entonnoir") et non pas l'envoi de tout le formulaire pour sauvegarde en base

    Mais merci quand même pour ta réponse, même tardive

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

Discussions similaires

  1. [2.x] Formulaire : champ non obligatoire
    Par Manuk dans le forum Symfony
    Réponses: 2
    Dernier message: 19/05/2014, 12h41
  2. Formulaire : champs non présent en POST
    Par dharth dans le forum Langages serveur
    Réponses: 2
    Dernier message: 28/10/2011, 11h30
  3. [AC-2007] Rendre formulaire/champ non modifiable ?
    Par AlainL dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/12/2009, 16h42
  4. Paramètres dans l'URL non reçus après redirection
    Par godhiva dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 29/07/2009, 16h13
  5. problème avec un formulaire : champ non défini
    Par merlubreizh dans le forum Langage
    Réponses: 5
    Dernier message: 04/02/2008, 15h22

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