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 ;)