Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-08-2009 14:27:46

GueloSuperStar
Membre
Lieu: Paris
Date d'inscription: 05-08-2009
Messages: 107

[Zend_Sessio][1.8] helper pour utiliser les sessions

Bonjour,

J'ai créer une class "View_Helper_Session" qui hérite de "Zend_Controller_Action_Helper_Abstract" car je n'arrivais pas à utiliser Zend_Session - Zend-Zend_Session_Namespace correctement dans mes controllers ou vues.


Dans mon bootstrap :

Code:

protected function _initSession(){
// On initialise la session
$session = new Zend_Session_Namespace('sharing_data_entreprise_frontend', true);
Zend_Registry::set('Zend_Session_frontend', $session);
return $session;
}

Pour utiliser ma class j'ai rajouter dans cette fonction "Zend_Registry::set('Zend_Session_frontend', $session);".
Au départ je pensais que le "return $session" permettait de récupérer la session soit dans _helper ou view .....
Mais apparemment non ou plutôt je ne sais pas faire...sad


le code de ma class

Code:

class View_Helper_Session extends Zend_Controller_Action_Helper_Abstract {
    protected $_session;
    public function direct($messageid = null ,$value=null) { 
        return $this->session($messageid,$value);
    }
  
    public function session($messageid,$value){
        if ($messageid === null || $messageid === '')
            return;
            
        //Recuperation de la session et son contenu
        $session = $this->getSession();

        if ($session === null) {
            return $messageid;
        }
        if( $value !== null ){
            $session->$messageid = $value;
            return;
        }
    
        return  $message = $session->$messageid;
    }

    public function getSession(){
        $fc = Zend_Controller_Front::getInstance();
        $moduleName = $fc->getRequest()->getModuleName();
        if ($this->_session === null) {
            if (Zend_Registry::isRegistered('Zend_Session_'.$moduleName) === true) {
                $this->setSession(Zend_Registry::get('Zend_Session_'.$moduleName));
            }
        }
        return $this->_session;
    }
  public function setSession($session){
        //print_r($session);
        if ($session instanceof Zend_Session_Namespace) {
            $this->_session = $session;
        } else {
            throw new Zend_View_Exception('You must set an instance of Zend_Session');
        }
        return $this;
    }
}

Alors voila je ne sais pas si c'est la bonne façon de faire pour gérer les session mais je n'en ai pas trouvé d'autre.

Également je ne savais pas trop si je devais faire un helper d'action ou un helper de vue.
Zend_Controller_Action_Helper_Abstract ou Zend_View_Helper_Abstract

J'aimerais avoir vos avis conseil sur ma méthode.

Merci

Dernière modification par GueloSuperStar (05-08-2009 14:30:18)


A+ Guelo Super Star

Hors ligne

 

#2 06-08-2009 09:17:37

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Zend_Sessio][1.8] helper pour utiliser les sessions

Je pense que faire

Code:

new Zend_Session_Namespace('sharing_data_entreprise_frontend');

te retournera la même instance de n'importe où dans ton code...

Hors ligne

 

#3 06-08-2009 09:27:54

GueloSuperStar
Membre
Lieu: Paris
Date d'inscription: 05-08-2009
Messages: 107

Re: [Zend_Sessio][1.8] helper pour utiliser les sessions

Salut,

Merci pour ta réponse.

Pour Ce bout de code j'y avais pensé, mais quand je fait sa par exemple dans un controller,il y a une message d'erreur

Code:

Message: A session namespace object already exists for this namespace ('sharing_data_entreprise_frontend'), and no additional accessors (session namespace objects) for this namespace are permitted.

ça viens peux être du fait que déclaration de la session le 2eme argument a "true" peux être...?

Code:

$session = new Zend_Session_Namespace('sharing_data_entreprise_frontend', true);

Car dans la doc il dise de mettre a "true" pour "Limiter les instances multiples par espace de noms"

Je ne sais pas si c'est la bonne pratique ou je n'ai pas très bien compris le sens de ce deuxième argument

Dernière modification par GueloSuperStar (06-08-2009 09:29:04)


A+ Guelo Super Star

Hors ligne

 

#4 06-08-2009 09:40:04

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Zend_Sessio][1.8] helper pour utiliser les sessions

C'est ça. Dans mon exemple je n'ai pas mis le true. Après à toi de voir smile

Hors ligne

 

#5 06-08-2009 09:48:59

GueloSuperStar
Membre
Lieu: Paris
Date d'inscription: 05-08-2009
Messages: 107

Re: [Zend_Sessio][1.8] helper pour utiliser les sessions

Tu sais à quoi sert exactement ce 2ème argument?
Car sur le net quand j'ai rechercher une initialisation de bootstrap à chaque fois il le mette à "true".
Est-ce une mauvaise pratique?

Code:

protected function _initSession(){
// On initialise la session
$session = new Zend_Session_Namespace('sharing_data_entreprise_frontend', true);
Zend_Registry::set('Zend_Session_frontend', $session);
return $session;
}

Et le return $session à quoi sert-il ici?

Et mon helper est-il valable ou il ne sert à rien?

Merci pour votre aide et explication pour l'avancement de mon apprentissage du framework


A+ Guelo Super Star

Hors ligne

 

#6 06-08-2009 11:25:10

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [Zend_Sessio][1.8] helper pour utiliser les sessions

Quel est l'interet de ce code ?

Code:

protected function _initSession(){
// On initialise la session
$session = new Zend_Session_Namespace('sharing_data_entreprise_frontend', true);
Zend_Registry::set('Zend_Session_frontend', $session);
return $session;
}

Moi je n'initialise rien et ca marche.


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#7 06-08-2009 11:54:32

GueloSuperStar
Membre
Lieu: Paris
Date d'inscription: 05-08-2009
Messages: 107

Re: [Zend_Sessio][1.8] helper pour utiliser les sessions

Je ne sais pas exactement qu'elle est vraiment l'intérêt de ce code car je commence depuis peu sur ce framework.
Cette fonction je l'ai récupéré sur le net en pensant qu'elle devait bien servir....
Je pense que cette fonction a de l'intérêt si on a plusieurs modules, ce qui permet d'initialiser un "Zend_Session_Namespace" pour chaque module.


D'après vous mon helper d'action n'est d'aucune utilité?


A+ Guelo Super Star

Hors ligne

 

#8 06-08-2009 22:13:34

oswalidos
Membre
Date d'inscription: 12-07-2009
Messages: 39

Re: [Zend_Sessio][1.8] helper pour utiliser les sessions

salut ,
je pense que _initSession n'a pas d'interet car on met souvent dans Zend_Registry quelque chose de "globale" alors on peut acceder n'importe où a cette variable par Zend_Registry::get('xxx') ,puisque la session est deja globale et accessible partout(a ce que je sache) avec une simple instanciation new Zend_Session_Namespace('nom_session') ,ce n'est pas la peine de mettre la session dans le Zend_Registry .
il existe peut etre des cas particulier ou avec les modules que j'ai pas encore manipulé qui ont besoin d'une telle _initSession

pour l'option true ,dans la doc :
Bien que le verrouillage de session fournisse un bon degré de protection contre l'utilisation
inattendue des données dans un espace de noms, Zend_Session_Namespace offre aussi la
possibilité d'empêcher la création d'instances multiples correspondant à un unique espace de
noms.
Pour activer ce comportement, réglez à true le second argument du constructeur quand vous
créez la dernière instance autorisée de Zend_Session_Namespace. Tout tentative suivante
d'instanciation du même espace de noms entraînera la levée d'une exception.

pour les modules aussi :
Quand de multiples modules utilisent des instances de Zend_Session_Namespace ayant
différents espaces de noms, chaque module obtient une encapsulation pour ses propres
données de session. Le constructeur de Zend_Session_Namespace peut recevoir un
paramètre facultatif $namespace, qui permet aux développeurs la partition des données
de session dans des espaces de noms séparés.

j'espere que ça pourra vous aider un peu smile

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