Passage d'options entre formulaire imbriqué

Par GabrielT, il y a 6 ans


Bonjour,

J'ai un petit soucis avec mon code... et je dois rater un truc dans un coin mais je ne sais pas ou ;)
Voila, j'ai deux formulaires qui s'imbriquent.
Dans le parent, rien de special. Dans l'enfant, il y un champs ChoiceType que je dois remplir avec un tableau.
Voici le code pour le formulaire enfant:

$builder ->add (y'en a d'autres au dessus) ->add('expert', ChoiceType::class, [ 'attr' => ['id' => 'expert'], 'choices' => $options['experts'], ]) ; } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => Etudie::class, 'required' => false, 'consultants' => [], 'experts' => [], ]); }

Le formulaire seul fonctionne bien.
Voici comment je passe mes info à l'enfant depuis mon Controller:

$etudie = new Etudie(); $form = $this->createForm(EtudieType::class, $etudie, ["consultants" => $consultants, "experts" => $experts]); $form->handleRequest($request);

Quand j'imbrique mon tableau dans le parent ca se gate, mes options ne passent pas.

J'ai essayé plusieurs choses dans le formType parent:
1- utiliser le formType de l'enfant de facon basique

$builder ->add('etudie', EtudieType::class);

-> ca me ressort bien mon formulaire complet mais les ChoiceType restent vides.
-> je passe mes infos de la meme maniere que dans le Controller enfant mais aucune prise en compte

2- utiliser le CollectionType et y ajouter mes parametres

$builder ->add('etudie', CollectionType::class, [ 'entry_type' => EtudieType::class, 'entry_options' => [ 'consultants' => $options['consultants'], 'experts' => $options['experts'] ] ]); public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => Personne::class, 'required' => false, 'consultants' => [], 'experts' => [], ]);

-> Ca ne reconnait plus le formulaire enfant, Symfony m'indique que les proprietes n'existe pas ou ne sont pas public.
-> De plus, en m'appuyant sur la doc de SymfonyHow to Embed a Collection of Forms, je ne peux passer mes infos correctement puisque mon entité attend un string et pas un array.
Voici comment je fais dans mon Controller Parent:

$etudie = new Etudie(); $etudie->setConsultant($consultants); $etudie->setExpert($experts); $personne = new Personne(); $personne->getEtudie()->add($etudie);

Je cherche juste à pouvoir remplir dynamiquement mon ChoiceType enfant.
Mes infos sont issues d'une base de données classique.

N'hesitez pas à me dire si je suis un boulet parce que j'ai oublié ou zappé LE truc important dans la doc que je n'aurai pas fait / vu.
Merci par avance de votre aide ;)

1 réponse

GabrielT, il y a 6 ans

Bon, je viens de trouver apres 2 jours de bagarre avec mon code.... merci a ceux qui m'ont lu en tout cas
je mets ci-dessous ma solution si ca peut aider quelqu'un d'autre ;)

->add('etudie', EtudieType::class, [ 'consultants' => $options['consultants'], 'experts' => $options['experts'], ])

Bon code a toutes et tous