Fonction du model s'exécutant deux fois et routeur
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:
1 2 3
| public function downloadQuestionPack($userId,$questionPackId) {
return $this->getMapper()->downloadQuestionPack($userId,$questionPackId);
} |
Code:
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);
}
} |
Elle est appelée au niveau du contrôleur:
Code:
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 voici le router qui appelle le contrôleur:
Code:
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); |
et enfin le lien à partir du view:
Code:
<a href="<?php echo $this->url(array('questionPackId'=>$questionPack->getId()),'downloadQuestionPack') ?>">Add the pack to your study plan</a>
Je recherche peut-être l'erreur au mauvais endroit donc la moindre piste m'aidera beaucoup.