Bonjour,
Je débute avec Symfony 2.8... L'idée globale de mon projet est de mettre en ligne un site qui permet aux utilisateurs d'entrer les antécédents médicaux de leur famille. Pour cela, j'ai créé une base de données contenant différentes tables :
- Compte : id, user, email, password...
- Individu : id, nom, prenom, genre, dateNaissance, dateDeces, commentaire, compte (FK de Compte)
- Relation : typeRelation, individuConnu (FK de Individu), individuALier (FK de Individu)
- Pathologie : id, dateDebut, dateFin, causeDeces, commentairePatho, gravite (FK de Gravite), banque_patho (FK de Banque_Patho), individu (FK de Individu)
- Gravite : gravitePatho
- Banque_Patho : nom_pathologie
Ma question :
Je veux créer un formulaire d'ajout d'un nouvel individu. Il me faut donc demander à l'utilisateur les informations de l'entité Individu (prenom, nom, genre, dateNaissance, dateDeces, commentaire), mais aussi les informations de l'entité Relation (individuConnu et typeRelation).
Pour cela, j'ai créé un formulaire IndividuEType imbriqué dans un formulaire RelationEType. Le problème c'est que j'ai besoin de récupérer la valeur de l'id du compte courant dans le formulaire imbriqué IndividuEType pour que mon nouvel individu soit affecté à un compte utilisateur. J'arrive à récupérer l'user courant depuis le contrôleur, et à le transmettre au formulaire RelationEType grâce à une variable de session mais je n'arrive pas à le retransmettre au formulaire imbriqué IndividuEType pour l'y enregistrer.
Si ma méthode est la bonne, pourriez vous m'indiquer comment la corriger ?
Sinon pourriez vous m'indiquer une meilleure méthode ?
Mon contrôleur :
Mon formulaire RelationEType :
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 public function ajouter_procheAction(Request $request) { $relation = new Relation(); $individu = new Individu(); $user = $this->get('security.context')->getToken()->getUser(); $_SESSION['iduser']=$user; $individu->setCompte($user); $form = $this->createForm('AdminBundle\Form\RelationEType', $relation, array('compte' => $user)); if ($form->handleRequest($request)->isValid()){ $individu->setCompte($user); $em = $this->getDoctrine()->getManager(); $em->persist($relation); $em->flush(); $request->getsession()->getFlashBag()->add('notice','Données bien enregistrées'); return $this->redirect($this->generateUrl('user_connected_index')); } return $this->render('UserBundle:User:ajouter_proche.html.twig', array('form' => $form->createView(),)); }
Mon formulaire imbriqué IndividuEType :
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 <?php namespace AdminBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\OptionsResolver\OptionsResolverInterface; use Doctrine\ORM\EntityRepository; use AdminBundle\Entity\Individu; use AdminBundle\Form\IndividuEType; class RelationEType extends AbstractType { /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $idcompte=$options['compte']; $builder ->add( 'individuConnu', EntityType::class, array( 'class' => 'AdminBundle:Individu', 'query_builder' => function (EntityRepository $er) use ($idcompte) { return $er->createQueryBuilder('i') ->where('i.compte = :idcompte') ->setParameter('idcompte', $idcompte) ->orderBy('i.nom', 'ASC') ->orderBy('i.prenom','ASC'); }, 'choice_label' => 'getNomComplet', 'multiple' => false, 'expanded' => false ) ) ->add( 'typeRelation', ChoiceType::class, array('choices' => array( true => 'ascendant', false => 'descendant', null => 'Moi - Premier individu')) ) ->add( 'individuALier', new IndividuEType($idcompte) ) ->add( 'Enregistrer', 'submit' ) ->add( 'commentaire_relation', TextType::class, array('data' => $idcompte, 'mapped' => false) ) ; } /** * {@inheritdoc} */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'AdminBundle\Entity\Relation', 'compte' => null )); } /** * {@inheritdoc} */ public function getBlockPrefix() { return 'adminbundle_relation'; } }
Merci d'avance pour vos réponses,
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 <?php namespace AdminBundle\Form; 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\BirthdayType; use Symfony\Component\Form\Extension\Core\Type\DateType; use Symfony\Component\Form\Extension\Core\Type\TextType; use AdminBundle\Entity\Individu; class IndividuEType extends AbstractType { /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $idcompte=$options['compte']; $builder ->add( 'nom', 'text', array('required' => false) ) ->add( 'prenom', 'text' ) ->add( 'genre', ChoiceType::class, array( 'choices' => array( null => '...', 'Masculin' => 'Masculin', 'Feminin' => 'Féminin', 'Autre' => 'Autre'), 'required' => false) ) ->add( 'dateNaissance', BirthdayType::class, array( 'placeholder' => array('day' => 'Jour', 'month' => 'Mois', 'year' => 'Année'), 'format' => 'ddMMyyyy', 'required' => false) ) ->add( 'dateDeces', BirthdayType::class, array( 'placeholder' => array('day' => 'Jour', 'month' => 'Mois', 'year' => 'Année'), 'format' => 'ddMMyyyy', 'required' => false) ) ->add( 'compte', 'hidden', array('data' => $_SESSION['iduser']) ) ->add( 'commentaire', 'textarea', array('required' => false) ) ->add( 'commentaire_num_compte', TextType::class, array('data' => $_SESSION['iduser'], 'mapped' => false) ) ; } /** * {@inheritdoc} */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'AdminBundle\Entity\Individu', 'compte' => null )); } /** * {@inheritdoc} */ public function getBlockPrefix() { return 'adminbundle_individu'; } }
S'il vous plaît soyez indulgents, ceci est mon premier projet Symfony
Partager