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