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 :

Bind d'un formulaire [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Octobre 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 80
    Par défaut Bind d'un formulaire
    Bonjour,
    Encore un petit problème dont je voudrais vous faire part
    Dans la classe de mon formulaire, j'ai un champ qui me permet de sélectionner un TypeMedia.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $builder
        .....
        ->add('type', 'entity', array(
                'class' => 'MyBundle:TypeMedia',
                'property' => 'nom',
                'query_builder' => function(EntityRepository $er) use($lisible) {
                                    return $er->createQueryBuilder('dc')
                                    ->where("dc.lisible = :lis")
                                    ->setParameter('lis', $lisible)
                                    ->orderBy('dc.nom', 'ASC');
                                },
            )
    Le formulaire est bien rendu, les choix proposés correspondent bien au booléen $lisible que je fournis à la fonction. Par contre, lorsque je soumets le formulaire, lors du bind, tous les champs sont bien acceptés à l'exception de celui-ci. J'ai un peu cherché dans le code et je pense comprendre que dans le bind (plus exactement lorsque la fonction 'getEntitiesByIds' est appelée, la requête ne retourne aucun enregistrement car la variable '$lisible' n'est semble-t-il plus transmise. La clause where se retrouve simplement avec 'where("dc.lisible = :lis")' sans que le paramètre 'lis' soit initialisé. Pour preuve, si je remplace le code ci-dessus par celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    return $er->createQueryBuilder('dc')
                  ->where("dc.lisible = '1'")       // :lis est à '1' dans l'exemple au-dessus.
                  ->orderBy('dc.nom', 'ASC');
    je n'ai plus de problème et le formulaire en entier est accepté. Comment procéder pour que la requête lors du bind soit correcte ?
    Merci de votre attention.

    Cordialement,
    Jean-Pierre.

  2. #2
    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
    Bonjour,

    Ou est récupéré ce $lisible ?

    Si c'est dans le controller, il faut que tu le passe en argument sans dans le constructeur du formulaire soit dans les options. C'est normalement plus propre dans le constructeur.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Octobre 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 80
    Par défaut
    Merci Stephan,
    Je le passe dans les options de la création du formulaire dans mon contrôleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $form = $this->createForm(new MediaType(), $un_media,
                                                 array('url' => $url,
                                                        'em' => $em,
                                                    'lisible' => $lisible
                                                 )
                          );
    Je le récupère ainsi dans la fonction buildForm de la classe du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $lisible = $options['lisible'];
            .....
    Je pense que c'est correct, non ?

    Cordialement,
    Jean-Pierre

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Octobre 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 80
    Par défaut
    Personne pour me donner une petite piste ?

    Cordialement,
    Jean-Pierre.

  5. #5
    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
    peux tu poster le code complet de l action ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Octobre 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 80
    Par défaut
    Volontiers Stephan, si cela peut aider
    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 addAction($type)
    {
        $request = $this->get('request');
        $un_media = new Media(); 
     
        $lisible = ($type == 'livre') ? 1 : 0;
        $url = $this->get('router')->generate('_list_auteurs', array(), true);
        $em = $this->getDoctrine()->getEntityManager();
     
        $form = $this->createForm(new MediaType(), $un_media,
                array('url' => $url,
                        'em' => $em,
                        'lisible' => $lisible
                )
        );
     
        if ('POST' == $request->getMethod()) { // Si on a posté le formulaire
             $form->bind($request);
     
             if ($form->isValid()) { 
                 $em = $this->getDoctrine()->getEntityManager();
                 $un_media = $form->getData();
                 $em->persist($un_media);
                 $em->flush();
     
                 return new RedirectResponse($this->generateUrl('_welcome'));
             }
        }
     
        return $this->render('MyBundle:Media:add.html.twig',
                                      array('form' => $form->createView(),
                                               'un_media' => $un_media,
                                               'type' => $type
                                      ));
    }
    Cordialement,
    Jean-Pierre

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

Discussions similaires

  1. [1.x] Bind et les formulaires
    Par bihman dans le forum Symfony
    Réponses: 4
    Dernier message: 28/09/2010, 16h47
  2. Utiliser le binding dans un formulaire
    Par karas.uchiwa dans le forum Flex
    Réponses: 6
    Dernier message: 05/01/2010, 20h37
  3. binding d'un formulaire à du JSON
    Par LEK dans le forum ASP.NET
    Réponses: 2
    Dernier message: 06/11/2009, 16h42
  4. Problème de Binding avec un formulaire
    Par vilveq dans le forum Flex
    Réponses: 7
    Dernier message: 06/08/2009, 11h03
  5. [VS2005][C#]Formulaire, ComboBox bindings
    Par Oufti dans le forum Windows Forms
    Réponses: 8
    Dernier message: 07/06/2006, 18h14

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