Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Salut,
dans mon bootstrap j'initialise ma session dans $session, puis dans une action je l'utilise, tout va bien ma $session existe et reste remplie comme je souhaite. Mais lorsque dans cette meme action je fais un _forward() alors la nouvelle action appelée n'a plus accès à $session, cependant $_SESSION['monNamespace'] existe toujours. J'aimerai comprendre pourquoi il y'a une sorte d' unset($session) implicite. 
mon code :
    protected function _initSession()
    {
        $session = new Zend_Session_Namespace('espritslibres', true);
        Zend_Registry::set('session', $session);
        return $session;
    }    public function doQuestionsAction(){
        if ($id = (int)$this->_request->getParam('id', 0)) {
            $session = Zend_Registry::get('session');
            //unset($session->qr);
            if (!isset($session->qr)) {
                echo '1-';
                $session->qr = new Model_Questionnary($id);
                $this->view->q = $session->qr->current();
            } else {
                echo '2-';
                // fixe __PHP_Incomplete_Class Object car la session debute avant le 
                // chargement des classes via l'autoloader
                $session->qr = unserialize(serialize($session->qr));
                
                if (isset($this->_request->answer)) {
                    echo '21-';
                    // answers checked in the form (form answers)
                    $fAs = $this->_request->answer;
                    // answers available for the question (question answers)
                    $qAs = $session->qr->current()->getAnswers();
                    $nA = count($qAs);
                    // is user passed the question
                    $isRight = true;
                    $i=0;
                    for ($i; $i<$nA; $i++) {
                        if($qAs[$i]->getIsRight() != isset($fAs[$i])){
                            $isRight = false;
                        }
                    }
                    //Zend_Registry::get('qr')->current()->setPassed($isRight);
                    $session->qr->current()->setPassed($isRight);
                }
                
                if ($session->qr->nextValid()) {
                    echo '221-';
                    //$this->view->q = Zend_Registry::get('qr')->next();
                    $session->qr->next();
                    $this->view->q = $session->qr->current();
                } else { // test is finished
                    echo '222-';
                    echo'<pre>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++';
                    print_r($session);
                    echo'<pre>----------------------------------------------------------';
                    print_r($session->qr);
                    echo'<pre>----------------------------------------------------------';
                    // redirection to endQuestionsAction()
                    //$this->_redirect('/en/questionnary/' . $id . '/end');
                    $this->_forward('end-questions');
                }
            }
            
        } else {
            echo 'need an id!';
        }
    }
    
    public function endQuestionsAction(){
        //$session->qr = unserialize(serialize($session->qr));
        echo'<pre>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++';
        print_r($session); //rien
        print_r($_SESSION); // ma session est bien remplie
        echo'<pre>----------------------------------------------------------';
        print_r($session->qr);
        echo'<pre>----------------------------------------------------------';
        //unset($session->qr);
    }J
ZF 1.9.6
Dernière modification par eilijah (06-01-2010 10:17:24)
Hors ligne
Beh, c'est normal, c'est les bases de PHP ![]()
Dans ta fonction endQuestionsAction, tu l'as initialisé ou ton $session ????
Hors ligne
Dans ton action pour avoir accès à la session il faut faire :
$session = Zend_Registry::get('session');A+, Philippe
Hors ligne
au temps pour moi , je pensais que le _forward aurait fait suivre $session... ![]()
bon bah je réinitialise alors puis je passe en _redirect aussi tiens:D
Dernière modification par eilijah (06-01-2010 10:16:33)
Hors ligne
Là c'est du PHP, c'est pas lié au ZF : une variable définie dans une fonction ou une méthode n'est pas accessible à l'extérieur de cette fonction. C'est pour ça qu'on utilise Zend_Registry, c'est pour partager des variables entre plusieurs fonctions (c'est l'équivalent de variables globales en gros).
A+, Philippe
Hors ligne
Pages: 1