Bonjour,
depuis un bon moment je cherche à faire un formulaire qui contient deux listes. Avec une liste qui affiche son contenu en fonction du choix fait dans l'autre. Ca je sais faire mais le problème survient au moment de la validation. Voici un peu de code avec ce que je faisais mais qui n'est pas bon :
avec ce code si je ne change pas l'ufr de départ et que je choisis le diplome que je veux je peux valider sans problème. Si je change l'ufr mes données sont invalides et je ne peux pas valider.
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 ->add('ufr','entity',array('query_builder'=> function(EntityRepository $er) { return $er->createQueryBuilder('u')->orderBy('u.nom', 'ASC');}, 'class' =>'UdcDiplomeBundle:Ufr', 'property' =>'nom', )) ->add('diplome','entity', array( 'class' =>'UdcDiplomeBundle:Diplome', 'property' =>'nomDiplome', 'query_builder'=> function(EntityRepository $er) { return $er->createQueryBuilder('diplome') ->join('diplome.ufr','ufr') ->where('ufr.id = :id') ->setParameter('id', $this->idUfr); } ));
On m'a conseillé d'utiliser les évènements de formulaire. Je le fais de cette façon mais je n'y arrive pas quand même :
je pense que c'est à ce niveau que je dois récupérer l'id de l'ufr changer pour
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 ->add('ufr','entity',array('query_builder'=> function(EntityRepository $er) { return $er->createQueryBuilder('u')->orderBy('u.nom', 'ASC');}, 'class' =>'UdcDiplomeBundle:Ufr', 'property' =>'nom', )); $factory = $builder->getFormFactory(); $builder->addEventListener( FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($factory) { $data = $event->getData(); if(null === $data) { return; } else { $event->getForm()->add( $factory->createNamed( 'diplome', 'entity', null, array( 'query_builder'=> function(EntityRepository $repository) { $qb = $repository->createQueryBuilder('diplome') ->join('diplome.ufr','ufr') ->where('ufr.id = :id') ->setParameter('id', 4); return $qb;}, 'class' =>'UdcDiplomeBundle:Diplome' ) ) ); } } );
le mettre dans ->setParameter('id', 4); à la place du 4. Pouvez-vous m'aider?
Merci
Partager