8722 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un petit soucis avec mon code... et je dois rater un truc dans un coin mais je ne sais pas ou Smiley cligne
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 Symfony[How to Embed a Collection of Forms](https://symfony.com/doc/4.4/form/form_collections.html#allowing-new-tags-with-the-prototype), 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 Smiley cligne
Rebonjour,
Apres 2 jours de bagarre avec mon code et peu apres avoir posté, j'ai enfin trouvé ce qui aurai du me sauter aux yeux.
Je vous mets la soluce, ca pourra toujours servir a quelqu'un ^^

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