Bonjour,
Je souhaite réaliser un questionnaire. J'ai une entité questionnaire avec ses chapitres qui contiennent des paramètres (ce sont les questions du formulaire) avec ses réponses. J'ai crée les entités Questionnaire,Chapitres,Parametre,Reponse avec les relation OneToMany. Y'a t-il des annotation a ajouter pour utiliser les collections dans le formulaire (exemple:cascade={"persist"})?
Dans mon controller je crée mon formulaire QuestionnaireType en lui donnant l'entité Questionnaire:
Formulaire questionnaire avec la collection chapitres:
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 class ReportingController extends Controller { public function questionnaireAction() { $em = $this->container->get('doctrine')->getEntityManager(); $chapitres= $em->getRepository('ODMReportingBundle:Chapitre')->findAll(); $questionnaire = new Questionnaire(); foreach($chapitres as $c) { foreach($c->getParametres() as $p) { $reponse = new Reponse(); $p->addReponses($reponse); } $questionnaire->addChapitres($c); } $form = $this->createForm(new QuestionnaireType(), $questionnaire); return $this->container->get('templating')->renderResponse('ODMReportingBundle:Reporting:test.html.twig', array( 'chapitres' => $chapitres, 'form' => $form->createView() )); }
Formulaire Chapitre avec la collection parametres:
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 class QuestionnaireType extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder->add('chapitres', 'collection', array('label' => 'QUESTIONNAIRE' ,'type' => new ChapitreType(), 'allow_add' => true, 'allow_delete' => true, 'prototype' => true, ) ); } public function getDefaultOptions(array $options) { return array( 'data_class' => 'ODM\ReportingBundle\Entity\Questionnaire', 'validation_groups' => array('registration') ); } public function getName() { return 'questionnaire'; } }
Formulaire Parametre avec la collection reponses:
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 class ChapitreType extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder->add('parametres', 'collection', array('label' => 'nom' , 'type' => new ParametreType(), 'allow_add' => true, 'allow_delete' => true, 'prototype' => true)); } public function getDefaultOptions(array $options) { return array( 'data_class' => 'ODM\ReportingBundle\Entity\Chapitre', 'validation_groups' => array('registration') ); } public function getName() { return 'chapitre'; } }
Formulaire Reponse avec la réponse (camps valeur) à saisir:
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 class ParametreType extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder->add('reponses', 'collection', array('label' => '' ,'type' => new ReponseType(), 'allow_add' => true, 'allow_delete' => true, 'prototype' => true)); } public function getDefaultOptions(array $options) { return array( 'data_class' => 'ODM\ReportingBundle\Entity\Parametre', 'validation_groups' => array('registration') ); } public function getName() { return 'parametre'; } }
Dans mon template je ne sais pas comment récupérer mes collections "chapitres", "parametres" et acceder à leurs champs afin de construire mon questionnaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class ReponseType extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder->add('valeur'); } public function getName() { return 'reponse'; } }
A la sauvegarde comment est-ce que j'accède aux valeurs saisie pour la réponse?
Dans mon controller comment est ce je peux accéder à l'entité "Questionnaire" et ses collections "Chapitres", idem avec les collections "parametres"?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 class QuestionnaireController extends Controller { public function questionnaireAction() {...} public function sauveAction() {?????}
Merci.
Partager