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);
    }
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);
        }
 
    }
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
    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 : 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);
et enfin le lien à partir du view:
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>
Je recherche peut-être l'erreur au mauvais endroit donc la moindre piste m'aidera beaucoup.