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