Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-07-2010 13:31:01

elec
Membre
Date d'inscription: 16-10-2009
Messages: 118

Probléme avec zend_session

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 :
   

Code:

<?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 :

Code:

<?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

 

#2 12-07-2010 18:06:38

laville
Nouveau membre
Date d'inscription: 22-06-2010
Messages: 8

Re: Probléme avec zend_session

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 smile

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 wink

Bootstrap :

Code:

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 :

Code:

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) :

Code:

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 wink
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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages