Bonjour


Dans un formulaire je veux incorporer les champs d'un formulaire dans un autre. En fait, j'ai 2 entités Souscripteur.php et Enfant.php et 1 Souscripteur peut avoir 0, 1 ou plusieurs enfants. J'ai déjà fait les liens entre les entités.
Mon problème est de pouvoir les champs enfants dans le formulaire SouscripteurType.php. J'ai un champs "Nombre d'enfants dans Souscripteur.php et j'aimerais qu'en fonction du nombre d'enfants on puisse ajouter les champs enfants pour les remplir.


Voici mes codes, je cherche d'abord ce qu'il faut mettre au niveau du controller, je pense pouvoir me débrouiller ensuite au niveau des vues, merci pour votre aide :


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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
 
 
namespace App\Controller;
 
 
use App\Entity\Souscripteur;
use App\Entity\Enfant;
use App\Form\SouscripteurType;
use App\Repository\SouscripteurRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
 
 
/**
 * @Route("/souscripteur")
 */
class SouscripteurController extends AbstractControllera
{
 
    /**
     * @Route("/new", name="souscripteur_new", methods={"GET","POST"})
     */
    public function new(Request $request): Response
    {
        $souscripteur = new Souscripteur();
 
 
        $enfant = new Enfant();
        $souscripteur->addEnfant($enfant);
 
 
        $form = $this->createForm(SouscripteurType::class, $souscripteur);
        $form->handleRequest($request);
 
 
        if ($form->isSubmitted() && $form->isValid()) {
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($souscripteur);
            $entityManager->flush();
 
 
            return $this->redirectToRoute('souscripteur_index');
        }
 
 
        return $this->render('souscripteur/new.html.twig', [
            'souscripteur' => $souscripteur,
            'form' => $form->createView(),
        ]);
    }
 
 
 
}

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
 
<?php
 
 
namespace App\Form;
 
 
use App\Entity\Souscripteur;
use App\Entity\Enfant;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
 
 
class SouscripteurType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('civilite', ChoiceType::class, [
                'choices'  => [
                    'Madame' => 'madame',
                    'Mademoiselle' => 'mademoiselle',
                    'Monsieur' => 'monsieur',
                ],
            ])
            ->add('nom', TextType::class)
            ->add('prenom')
            ->add('nom_jeune_fille')
            ->add('date_naissance')
            ->add('pays_naissance')
            ->add('ville_naissance')
            ->add('pays_residence')
            ->add('ville_residence')
            ->add('profession')
            ->add('adresse')
            ->add('code_postal')
            ->add('ville')
            ->add('telephone')
            ->add('tel_domicile')
            ->add('situation_familiale', ChoiceType::class, [
                'choices'  => [
                    'Marié' => 'marie',
                    'Pacsé(e)' => 'pasce',
                    'Concubin(e)' => 'concubin',
                    'Célibataire' => 'celibataire',
                    'Divorcé(e)' => 'divorce',
                    'Veuf(ve)' => 'veuf',
                ],
            ])
            ->add('nombre_enfants', ChoiceType::class, [
                'choices'  => [
                    '0' => '0',
                    '1' => '1',
                    '2' => '2',
                    '3' => '3',
                    '4' => '4',
                    '5' => '5',
                    '6' => '6',
                    '8' => '8',
                    '9' => '9',
                    '10' => '10',
                ],
            ])
            ->add('enfants', CollectionType::class, [
                'entry_type' => Enfant::class,
                ])
            ->add('conjoint')
        ;
    }
 
 
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Souscripteur::class,
        ]);
    }
}



Mais j'ai cette erreur:
Could not load type "App\Entity\Enfant": class does not implement "Symfony\Component\Form\FormTypeInterface".