Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 06-01-2010 07:38:01

eilijah
Membre
Date d'inscription: 17-02-2009
Messages: 20

[résolu]Variable de session detruite apres un _forward

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 :

Code:

    protected function _initSession()
    {
        $session = new Zend_Session_Namespace('espritslibres', true);
        Zend_Registry::set('session', $session);
        return $session;
    }

Code:

    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

 

#2 06-01-2010 08:32:12

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [résolu]Variable de session detruite apres un _forward

Beh, c'est normal, c'est les bases de PHP smile
Dans ta fonction endQuestionsAction, tu l'as initialisé ou ton $session ????


----
Gruiiik !

Hors ligne

 

#3 06-01-2010 08:58:47

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [résolu]Variable de session detruite apres un _forward

Dans ton action pour avoir accès à la session il faut faire :

Code:

$session = Zend_Registry::get('session');

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#4 06-01-2010 10:13:12

eilijah
Membre
Date d'inscription: 17-02-2009
Messages: 20

Re: [résolu]Variable de session detruite apres un _forward

au temps pour moi , je pensais que le _forward aurait fait suivre $session... big_smile

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

 

#5 06-01-2010 10:43:19

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [résolu]Variable de session detruite apres un _forward

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


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

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