Bonjour,

J'ai un soucis depuis plusieurs jours avec mon programme en Symfony 4... Je me permets de vous l'expliquer ici en espérant qu'un génie m'explique quel est le soucis...

J'ai créé un formulaire qui fait interagir 4 tables d'une DB à savoir

- Individu (qui comporte : nom , prénom, sexe etc)

- Menage (qui se trouve être la composition de ménage de cet individu et qui comporte : l'id du déclarant , l'id des différents membres qui composent le ménage, etc..)

- Membre (qui est une table qui est reliée à individu en relation 1-1 puisqu'un membre est un individu qui possède en plus un rôle)

- Role (qui est la table reliée à membre, chaque membre ayant un role tel que pere, mere, oncle, frere, soeur etc)

Pour agencer tout ca dans mon twig, j'utilise le Jquery Collection.

Quand je veux ajouter un membre au ménage et que je valide, il n'apparaît pas...
Normalement dans l'architecture Individu-Menage-Membres-X je devrais avoir une collection d'objets membres, or ils n'apparaissent pas...

Pourtant j'utilise déjà cette méthode pour ajouter les enfants à l'individu en question et cela fonctionne ... Quelqu'un pourrait m'aider ?
Je sais que c'est peut-être pas très clair, mais c'est assez difficile à expliquer. Je peux donner des précisions à la demande.

mon dump d'individu

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
Individu {#466 ▼
  -id: null
  -nom: "IND1"
  -prenom: "IND1"
  -registreNational: "11111111111"
  -naissanceDate: ""
  -naissanceLieu: null
  -actif: true
  -softdelete: false
  -adresses: ArrayCollection {#538 ▶}
  -animateur: null
  -eddEnfant: null
  -frequentations: ArrayCollection {#503 ▶}
  -etatCivil: null
  -parents: ArrayCollection {#504 ▶}
  -enfants: ArrayCollection {#505 ▶}
  -membre: null
  -situationPro: ArrayCollection {#507 ▶}
  -sexe: null
  -nationalite: null
  -origine: null
  -menages: ArrayCollection {#537 ▼
    -elements: array:1 [0 => Menage {#1764 ▼
        -id: null
        -declarant: Individu {#466}
        -dateCreation: DateTime @1551258960 {#2367 ▶}
        -actif: true
        -softdelete: false
        -membres: ArrayCollection {#1763 ▼
          -elements: []  <--- ICI
        }
      }
    ]
  }
mes classes Type :

individuType

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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
        ->add('nom', TextType::class, [
                //'required' => true,
                'label' => 'Nom',
        ])
        ->add('prenom', TextType::class, [
                //'required' => true,
                'label' => 'Prenom',
        ])
        ->add('registreNational',   TextType::class, [
                //'required' => true,
                'attr' => array(
                        'maxlength' => 11,
                        'minlength' => 11,
                ),
        ])
        ->add('adresseDomicile', AdresseDomicileType::class, array(
                'by_reference' => false,
                'data_class' => Adresse::class,
                'label' => false
        ))
        ->add('adresseResidence', AdresseResidenceType::class, array(
                'by_reference' => false,
                'data_class' => Adresse::class,
                'label' => false
        )) 
        ->add('naissanceLieu',  TextType::class, [
                'required' => false,
                'label' => 'Lieu de naissance',
        ])
        ->add('naissanceDate',    DateType::class, [  
                'label' => 'Date de naissance',
                'widget' => 'single_text',
                'html5' => false,
                'required' => false,
                'input' => 'string',
                'format' => 'dd/MM/yyyy',
                'attr' => ['class' => 'js-datepicker'],
        ])
        ->add('actif', HiddenType::class, [
                'data' => '1',
        ])
        ->add('softdelete', HiddenType::class, [
                'data' => '0',
        ])
        ->add('sexe', EntityType::class, [
                'class'  => Sexe::class,
                'placeholder' => 'Selectionnez le sexe de la personne',
                'choice_label' => 'intitule',
                'multiple'     => false,
                'required' => false,
        ])    
        ->add('nationalite', EntityType::class, [
                'required' => false,  
                'class'  => Nationalite::class,
                'placeholder' => 'Selectionnez la nationnalité de la personne',
                'choice_label' => 'nationalite',
                'multiple'     => false,
        ])
        ->add('etatCivil', EntityType::class, [
                'class'  => EtatCivil::class,
                'placeholder' => 'Selectionnez l\'état civil de la personne',
                'choice_label' => 'libelle',
                'multiple'     => false,
                'required' => false,
        ])
        ->add('origine', EntityType::class, [
                'class'  => Nationalite::class,
                'placeholder' => 'Selectionnez le pays d\'origine de la personne',
                'choice_label' => 'pays',
                'multiple'     => false,
                'required' => false,  
        ])
        ->add('currentContact', ContactType::class, array(
                'data_class' => Contact::class,
                'label' => false
        ))            
        ->add('currentSituationPro', IndividuSituationProType::class, array(
                'data_class' => IndividuSituationPro::class,
                'label' => false
        ))
        ->add('enfants', CollectionType::class, [
                'label'         => false,
                'entry_type'    => FiliationType::class,
                'entry_options' => [
                    'label' => false,
                ],
                'allow_add'     => true,
                'allow_delete'  => true,
                'prototype'     => true,
                'required'      => false,
                'by_reference' => true,
                'delete_empty' => true,      
                'attr'          => [
                    // Here is the selector for "enfants" collection
                    'class' => 'enfants-collection',
                ],
            ])
        ->add('currentMenage', MenageType::class,[
                'label' => false,
        ])
        ->add('softdelete', HiddenType::class, [
                'data' => '0',
                ])
        ->add('actif', HiddenType::class, [
                'data' => '1',
                ])
        ;
    }
 
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Individu::class,
        ]);
    }
    public function getBlockPrefix()
    {
        return 'individu';
    }
menageType
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
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('membres', CollectionType::class, [
                'label'         => false,
                'entry_type'    => MembreType::class,
                'entry_options' => [
                        'label' => false,
                ],
                'allow_add'     => true,
                'allow_delete'  => true,
                'prototype'     => true,
                'required'      => false,
                'by_reference' => true,
                'delete_empty' => true,      
                'attr'          => [
                        // Here is the selector for "membre" collection
                        'class' => 'membre-collection',
                ]
        ])
        ;
    }
 
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Menage::class,
        ]);
    }
    public function getBlockPrefix()
    {
        return 'menage';
    }
MembreType
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
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('individu', MembreAttrType::class, array(
                'data_class' => Individu::class,
                'label' => false
            ))    
            ->add('statut', EntityType::class, [
                'class'  => Statut::class,
                'placeholder' => 'Selectionnez le rôle de la personne',
                'choice_label' => 'intitule',
                'multiple'     => false,
                'required' => false,
            ])
            ->add('positionMembre', HiddenType::class, [
                'attr' => [
                    'class' => 'positionMembre',
                ]
            ])
            ;
    }
 
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Membre::class,
        ]);
    }
 
    public function getBlockPrefix()
    {
        return 'membre';
    }
MembreAttrType qui est basé sur individu. Je ne peux pas relier à individu sinon ca boucle.

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
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nom',  TextType::class, [
                'required' => true,
                'label' => false,
            ])
            ->add('prenom', TextType::class, [
                    'required' => true,
                    'label' => false,
            ])
            ->add('registreNational',  TextType::class, [
                    'required' => true,
                    'label' => false,
                    'attr' => array('maxlength' => 11,
                        'minlength' => 11),
            ])
            ->add('sexe', EntityType::class, [
                'class'  => Sexe::class,
                'placeholder' => 'Selectionnez le sexe de la personne',
                'choice_label' => 'intitule',
                'multiple'     => false,
                'required' => false,
            ])                
            ->add('softdelete', HiddenType::class, [
                'data' => '0',
            ])        
            ->add('actif', HiddenType::class, [
                'data' => '1',
            ])
            ;
    }
 
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            // Configure your form options here
            'data_class' => Individu::class,
        ]);
    }
 
    public function getBlockPrefix()
    {
        return 'individuMembre';
    }