Bonjour,
Une de mes fonctions s'exécute à deux reprises (données en doublon dans la db). Après avoir chercher le problème en remontant à la source plusieurs fois, je ne trouve toujours pas d'endroit ou j'aurais fait un "double appel" à cette fonction. Étant débutant avec zend, il pourrait s'agir d'un problème relier à une mauvaise utilisation du router ou de la structure MVC.
Mon model Api a une fonction qui effectue plusieurs enregistrement dans la base de donnée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public function downloadQuestionPack($userId,$questionPackId) { return $this->getMapper()->downloadQuestionPack($userId,$questionPackId); }Elle est appelée au niveau du contrôleur:
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 public function downloadQuestionPack($userId,$questionPackId) { $questionPackModel = new Application_Model_QuestionPack(); $questionPack = $questionPackModel->find($questionPackId); $questionsId = $questionPack->getAllQuestionsId(); // create a userExercice for the question Pack $userExercice = new Application_Model_UserExercice(); $userExercice->setUserId($userId) ->setCurrentQuestionId($questionsId[0]) ->setTotalNumberOfQuestions(count($questionsId)); $userExerciceId = $userExercice->save(); $userExercice->setId($userExerciceId); // download each of the questions in the questionToUser table // every time we save a question, we need to send the nextQuestionId for ($index = 0; $index < count($questionsId); $index++) { //it the last question of the userExercice if ($index == count($questionsId)-1) { $nextQuestionId = 0; } else { $nextQuestionId = $questionsId[$index+1]; } $this->downloadQuestion($userId, $questionsId[$index], $userExercice, $nextQuestionId); } }
Et voici le router qui appelle le contrôleur:
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 public function downloadQuestionPackAction() { // set the user id and redirect if user not authentificated $auth = Zend_Auth::getInstance(); if ($auth->hasIdentity()) { $userId = $auth->getIdentity()->id; } else { $this->_redirect('user/auth/login'); } // set questionPackId from url param $questionPackId = $this->_getParam('questionPackId'); $apiModel = new Application_Model_Api(); $apiModel->downloadQuestionPack($userId, $questionPackId); }
et enfin le lien à partir du view:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $route = new Zend_Controller_Router_Route( 'exercice/question-packs/download-question-pack/:questionPackId/', array( 'module' => 'exercice', 'controller' => 'question-packs', 'action' => 'download-question-pack' ) ); $router->addRoute('downloadQuestionPack',$route);
Je recherche peut-être l'erreur au mauvais endroit donc la moindre piste m'aidera beaucoup.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <a href="<?php echo $this->url(array('questionPackId'=>$questionPack->getId()),'downloadQuestionPack') ?>">Add the pack to your study plan</a>
Partager