Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai un sérieux problème avec zend_session,c'est que je n'arrive pas à récupérer ma valeur exacte et cela mon code :
j'utilise la classe suivant que je l'ai ajouté à ma librairie :
<?php require_once("Zend/Session.php"); class SessionWrapper { protected static $_instance; public $namespace = null; private function __construct() { /* Explicitly start the session */ Zend_Session::start(); /* Create our Session namespace - using 'Default' namespace */ $this->namespace = new Zend_Session_Namespace(); /** Check that our namespace has been initialized - if not, regenerate the session id * Makes Session fixation more difficult to achieve */ if (!isset($this->namespace->initialized)) { Zend_Session::regenerateId(); $this->namespace->initialized = true; } } /** * Implementation of the singleton design pattern * See http://www.talkphp.com/advanced-php-programming/1304-how-use-singleton-design-pattern.html */ public static function getInstance() { if (null === self::$_instance) { self::$_instance = new self(); } return self::$_instance; } /** * Public method to retrieve a value stored in the session * return $default if $var not found in session namespace * @param $var string * @param $default string * @return string */ public function getSessVar($var, $default=null){ return (isset($this->namespace->$var)) ? $this->namespace->$var : $default; } /** * Public function to save a value to the session * @param $var string * @param $value */ public function setSessVar($var, $value){ if (!empty($var) && !empty($value)){ $this->namespace->$var = $value; } } } ?>
Puis je souhaite récupérer une valeur de l'action "index" à une autre action "search" dans le meme controlleur "IndexController" :
IndexController.php :
<?php class IndexController extends Zend_Controller_Action { function indexAction() { ..... $name="test"; $session = SessionWrapper::getInstance(); $session->setSessVar("name", $name); } function searchAction() { $session = SessionWrapper::getInstance(); echo $session->getSessVar("name","-1"); } }
Je récupère dans la page "search.phtml" "-1" au lieu de "test"....,je ne sais pas ou est l'erreur mais je souhaite récupérer ma variable d'une action à une autre.
Merci.Nll
Hors ligne
Bonjour, vu que tu n'as aucune réponse, je me permet de te proposer quelques tests préliminaires pour voir où cela pose problème :
- as tu testé directement après avoir effectué ton setSessVar d'effectuer un getSessVar ?
- si non, fais le et si le getSessvar ne fonctionne pas alors le problème est .... autre
Pour info, voici comment je fais pour gérer les sessions (c'est un début je commence juste à implémenter le ZF...) et cela semble fonctionner
Bootstrap :
protected function _initSession() { // On initialise la session $session = new Zend_Session_Namespace('zendSession', true); Zend_Registry::set('zendSession', $session); return $session; }
Puis dans un de mes fichiers controller pour changer la langue :
public function languageAction(){ $params = $this->getRequest()->getParams(); if(isset($params['lang']) && in_array($params['lang'], array('en','fr'))){ Zend_Registry::get('zendSession')->lang = $params['lang']; } $this->_redirect('/'); }
et pour la récupérer (bootstrap) :
protected function _initTranslate() { // On récupère la session du site. $session = Zend_Registry::get('zendSession'); $frontendOptions = array( 'lifetime' => 3600, 'automatic_serialization' => true ); $cache = Zend_Cache::factory( 'Core', 'APC', $frontendOptions); Zend_Translate::setCache($cache); // On définit la langue par défaut sur le site. $locale = new Zend_Locale('fr'); // On enregistre cette langue dans notre registre. Zend_Registry::set('Zend_Locale', $locale); // Si la langue existe en session, on récupère la session, sinon on prend la valeur par défaut. $langLocale = isset($session->lang) ? $session->lang : $locale; // On lance l'objet de traduction en lui passant les fichiers de langues $translate = new Zend_Translate('tmx',APPLICATION_PATH.'/languages/menu.tmx'); // $translate->addTranslation(APPLICATION_PATH.'/languages/menu_en.php','en'); // On lui passe la langue courante du site $translate->setLocale($langLocale); // Important pour utiliser le helper. Zend_Registry::set('Zend_Translate', $translate); // Zend_Debug::dump($translate->getAdapter()->getList()); // On lance l'objet de traduction en lui passant les fichiers de langues $translateCore = new Zend_Translate('array',APPLICATION_PATH.'/languages/core_fr_FR.php','fr'); $translateCore->addTranslation(APPLICATION_PATH.'/languages/core_en.php','en'); // On lui passe la langue courante du site $translateCore->setLocale($langLocale); Zend_Registry::set('translateCore', $translateCore); }
ici je test les fichiers TMX et les fichiers xml, ce qui t'intéresse est la partie session
La seule différence que je vois donc vis à vis de ce que tu as fais c'est l'appel à la fonction Zend_Registry.
En espérant que cela puisse t'aider...
Hors ligne