Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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.
public function downloadQuestionPack($userId,$questionPackId) { return $this->getMapper()->downloadQuestionPack($userId,$questionPackId); }
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:
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:
$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:
<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.
Hors ligne
Pages: 1