Bonjour,
Voila déjà la description de mon projet :
Je dois créer (pour mon stage) une page d’enquête de satisfaction clients pour mon entreprise sur leur site internet en utilisant symfony.
J'ai donc choisi d'afficher un formulaire "enquete" qui imbrique plusieurs formulaires "question" qui eux-mêmes imbriquent un seul formulaire "reponse".
Les formulaire enquete et reponse sont vides et seront remplis par le client alors que les questions sont préalablement définis dans la bdd.
Mon schéma YML :
Code php : 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 #--- Question -------------------------------------------------------# Question: columns: ennonce: { type: string(255), notnull: true } langue: { type: string(2), notnull: true } #--- Reponse -------------------------------------------------------# Reponse: columns: note: { type: integer(), notnull: true } enquete_id: { type: integer, notnull: true } question_id: { type: integer, notnull: true } relations: Enquete: { onDelete: CASCADE, local: enquete_id, foreign: id } Question: { onDelete: CASCADE, local: question_id, foreign: id } #--- Enquête -------------------------------------------------------# Enquete: columns: observations: { type: string(255), notnull: true } id_reservation: { type: integer(), notnull: true }
Mon action.class.php de mon module 'enquete' :
Code php : 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 class enqueteActions extends sfActions { public function executeIndex(sfWebRequest $request) { $this->forme = new EnqueteForm(); } public function executeSubmit(sfWebRequest $request) { $enqueteval = $request->getParameter('enquete'); print_r($enqueteval); $this->setTemplate('index'); } protected function processForm(sfWebRequest $request, sfForm $form) { $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName())); if ($form->isValid()) { $form->save(); } } }
Mon EnqueteForm.class.php :
Code php : 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 EnqueteForm extends BaseEnqueteForm { public function configure() { $requete = Doctrine_Query::create() // On crée une requête. ->select('id') ->from('Question') // On veut les enregistrements de la table Question. ->execute(); // On exécute la requête. $i=$requete->count(); $new_question = new BaseForm(); for($j=1; $j<=$i; $j+=1) { $question = Doctrine_Core::getTable('Question')->find($j); $question_form = new QuestionForm($question); $new_question->embedForm($j,$question_form); } $this->embedForm('NouvelleQuestion', $new_question); } }
Mon QuestionForm.class.php :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class QuestionForm extends BaseQuestionForm { public function configure() { $rep= new ReponseForm(); $this->embedForm('NouvelleReponse', $rep); } }
Mon index.success.php :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <div align="center"> <h1 align="center">Evaluation Client</h1> <form method="post" action="<?php echo url_for('@enquete_submit') ?>"> <table> <?php echo $forme ?> </table> <input type="submit" class="submit" value="Envoyer"> </form> </div>
Ce que contient ma variable $enqueteval après un submit() :
Code php : 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 Array ( [observations] => test [NouvelleQuestion] => Array ( [1] => Array ( [ennonce] => test1 ? [NouvelleReponse] => Array ( [note] => 1 [id] => [enquete_id] => 1 [question_id] => 1 ) [id] => 1 [langue] => fr ) [2] => Array ( [ennonce] => test2 ? [NouvelleReponse] => Array ( [note] => 1 [id] => [enquete_id] => 1 [question_id] => 2 ) [id] => 2 [langue] => fr ) [3] => Array ( [ennonce] => test3 ? [NouvelleReponse] => Array ( [note] => 1 [id] => [enquete_id] => 1 [question_id] => 3 ) [id] => 3 [langue] => fr ) [4] => Array ( [ennonce] => test4 ? [NouvelleReponse] => Array ( [note] => 1 [id] => [enquete_id] => 1 [question_id] => 4 ) [id] => 4 [langue] => fr ) ) [id] => [id_reservation] => 1 [_csrf_token] => 2dc19fe999f27930eb6d0d09f2bad10c )
Et enfin mon problème:
Suis-je sur la bonne voie ?
Je m'explique à partir de ma variable $enqueteval je dois sauvegarder dans ma base de donnée ma nouvelle enquête et les réponses qui lui sont associées alors que les réponses existent déjà (la création des question sera gérée plus tard et donc je dois avoir une gestion dynamique : afficher un choix de réponses par question).
Je ne peux donc pas utiliser la méthode BindAndSave().
J'aperçois un début de solution qui serait de parcourir mon tableau $enqueteval pour redéfinir mes objets enquete et reponse pour les insérer ensuite dans la bdd.
Mais est-ce une bonne solution ? J'ai l'impression que ce serait un peu "brouillon" et j'aimerais savoir si je n'est pas tout simplement fait n'importe quoi au niveau de l'imbrication de mes formulaires ?
Merci d'avance aux personnes qui vont prendre le temps de me lire et me répondre en espérant avoir été assez clair.
PS : j'ai mis en pièce joint un aperçu de ma page enquête (la mise en page n'est pas encore finis mais c'est pour vous donner un aperçus).
Partager