Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 24-11-2010 18:54:47

ach
Nouveau membre
Date d'inscription: 24-11-2010
Messages: 4

[1.10] Fonction du model s'exécutant deux fois et router

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:

public function downloadQuestionPack($userId,$questionPackId) {
        return $this->getMapper()->downloadQuestionPack($userId,$questionPackId);
    }

Code:

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:

    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:

$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.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages