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 : entity et select [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 98
    Points : 57
    Points
    57
    Par défaut Formulaire : entity et select
    Bonjour,

    Dans un formulaire, j'utilise un champ de type entity alimenté par un object ayant quatre champs : typeReference, ordre, code, libelle.

    Je décris le champ comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            ->add('civilite','entity',array( 'label' => 'Civilité',
                                            'class' =>'AshBundle:References',
                                            'query_builder' => function(EntityRepository $rr) {
                                                return $rr->createQueryBuilder('r')
                                                        ->where('r.typeReference=:typeR')
                                                         ->orderBy('ordre')
                                                        ->setParameter('typeR','CIV');
                                            },
                                            'property' => 'libelle'
     
                                           )
         )
    et le select final donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select id="form_civilite" name="form[civilite]" required="required">
    <option value="0">Monsieur</option>
    <option value="1">Madame</option>
    <option value="2">Mademoiselle</option>
    </select>
    Comment faire en sorte que les "values" du select reprennent les valeurs du champ code ?

    Merci d'avance.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,
    Le champ entité est conçu pour renvoyer une Entité Doctrine (en l'occurence une entité AshBundle:References). donc il est normal que les value de ton select utilise l'id de ces objets.

    si tu veux transmettre un autre type de valeur (ici une chaine de caractere) tu peux utiliser un champ de type choice
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $choices=array();
    $query=$em->getRepository('AshBundle:References')
                             ->createQueryBuilder('r')
                             ->where('r.typeReference=:typeR')
                           ->orderBy('ordre')
                            ->setParameter('typeR','CIV')-getQuery();
    //on crée la liste de choix
    foreach($query->getResult() as $ref){
           $choices[$ref->getCode()]=$ref->getLibelle();
    }
    //l'attribut 'civilité' de l'objet doit être un string et non un objet reference
    $builder->add('civilite','choice',array( 'label' => 'Civilité', 
                                            'choice' =>$choices )

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    Ça me plaît bien . En tout cas, ça me semble logique.

    Je ne pourrai pas tester avant lundi, mais je reviendrai donner le résultat.

    Merci !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    J'ai donc appliqué la méthode conseillée par arnooo999 qui a bien fonctionné après un petit souci (je débute...) : la référence à l'entitymanager $em a posé problème. Il a fallu que je crée une fonction construct à ma classe pour lui passer l'entity manager en paramètre, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      protected $em;
     
        function __construct(EntityManager $em) {
            $this->em=$em;
        }
    et j'ai continué comme indiqué :

    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
     
      public function buildForm(FormBuilder $builder, array $options) {
            $civilites=array();
            $query=$this->em->getRepository('AshBundle:References')->getRefByCode('CIV');
            foreach ($query as $ref) {
                $civilites[$ref->geCode()]=$ref->getLibelle();
            }
     
            $builder
            ->add('civilite','choice',array( 'label' => 'Civilité',
                                             'choices' => $civilites
     
     
                                           )
         )
    après avoir mis la fonction GetRefByCode dans le repository.

    Et dans mon controller, je crée la form avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        $em=$this->getDoctrine()->getEntityManager();
        $form=$this->createForm(new CandidatType($em), $candidat);
    Mais il y a peut-être un moyen plus simple de récupérer l'entitymanager dans ma fonction buildform ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    Non, c'est la bonne méthode.
    Un petit si la réponse convient. Merci.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    Merci

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

Discussions similaires

  1. [AJAX] Ajax, formulaire, div et select
    Par n8ken dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/09/2006, 10h51
  2. [formulaire]Recuperation valeur select et réutilisation
    Par SnakemaN dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/07/2006, 16h05
  3. [HTML FORMULAIRES] truander un "select" ?
    Par Michel_57 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 14/04/2006, 09h33
  4. Afficher un nouveau formulaire de type select
    Par bobby23 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/01/2006, 00h19
  5. Formulaire avec un select
    Par mandaillou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/11/2005, 10h59

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