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