Bonjour,
Je suis confronté à une problématique sur la modification dynamique d'un formulaire en fonction des données sélectionnées. Je vais tenter d'être le plus explicite possible avec captures à l'appui.
J'ai trois entités : Pays, Ville, Quartier.
Les relations sont les suivantes : Un Pays a plusieurs villes/Chaque Ville appartient à un pays. De la même manière, Une ville dispose de plusieurs Quartiers/Chaque quartier appartient à une seule ville.
J'ai un formulaire (PaysType, qui tape sur la classe Pays) avec 3 champs. Pays, Villes, Quartiers.
Lorsque je sélectionne un pays, j'ai, avec le PRE_SET_DATA et POST_SUBMIT puis AJAX, les villes appartenant au pays choisit qui apparait. Voilà le code PHP en question, tiré de la doc Symfony (https://symfony.com/doc/current/form...submitted-data)
Maintenant, je veux faire exactement la même chose cette fois si avec les quartiers. A savoir que lorsque je sélectionne une ville, j'ai les quartiers de ce dernier qui apparaissent.
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 $formModifier = function(FormInterface $form, Country $country = null) { $cities = null === $country ? [] : $country->getCities(); $form->add('cities', EntityType::class, [ 'class' => City::class, 'choices' => $cities, 'choice_label' => 'name', 'placeholder' => 'Villes (Choisir un pays)', 'label' => 'Votre ville', 'mapped' => false ]); }; $builder->addEventListener( FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($formModifier) { $data = $event->getData(); $formModifier($event->getForm(), $data); } ); //Ecoute l'évènement de changement du pays $builder->get('name')->addEventListener( FormEvents::POST_SUBMIT, function (FormEvent $event) use ($formModifier) { //Récupérer le pays selectionné. //getForm() permet de récup le formulaire dans l'évènement $country = $event->getForm()->getData(); $formModifier($event->getForm()->getParent(), $country); } );
Je n'ai pas mis le code JS pour éviter d'encombrer le post mais si besoin je peux le faire.
Si vous avez une idée de comment faire ca je suis preneur.
Voici les propriétés de l'entité Pays :
Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] private ?int $id = null; #[ORM\Column(length: 150)] private ?string $name = null; #[ORM\OneToMany(mappedBy: 'country', targetEntity: City::class)] private Collection $cities;
Partager