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