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
Auteur
Réponse acceptée

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