2010-03-24 5 views
2

Je commence donc dans le framework Zend et cherche à implémenter une session "User" sur tout le site .... quelque chose auquel je peux facilement accéder depuis TOUS les modules/contrôleurs du application.Meilleure façon de traiter la gestion de session dans Zend Framework

Je suis comme, dois-je faire un nouvel espace de noms dans la bibliothèque et à la commande, comme:

class MYCUSTOMLIB_Controller_Action extends Zend_Controller_Action 
{ 
    protected $_userSession; 

    function preDispatch(Zend_Controller_Request_Abstract $req) 
    { 
     $this->_userSession = new Zend_Session_Namespace('user'); 
    } 
} 

ont alors tous eT mes contrôleurs/modules/etc s'étendre de cela?

Ou devrais-je créer un plugin ou quoi? Comment voulez-vous faire de ce plugin pour passer la session utilisateur au contrôleur?

Ou est-ce que je le fais dans le bootstrap ?? Encore une fois comment passer au contrôleur?

De même devrais-je utiliser Zend_Session_Namespace ou Zend_Http_Cookie et aussi comment crypter et xss nettoyer le cookie ou est-ce fait automagiquement?

Répondre

6

J'initialiser dans le bootstrap aussi:

//Bootstrap.php 
protected function _initUserSession() 
{ 
    return new Zend_Session_Namespace('user'); 
} 

alors j'utiliser une aide d'action:

// library/App/Controller/Action/Helper/Session.php 
class App_Controller_Action_Helper_Session extends Zend_Controller_Action_Helper_Abstract 
{ 
    function direct() 
    { 
     return $this->getFrontController()->getParam('userSession'); 
    } 
} 

Vous y accédez à votre contrôleur comme ceci:

function indexAction() 
{ 
    $session = $this->_helper->session; 
} 
+0

Êtes-vous sûr de l'assistant View? –

+0

Cela ressemble à un assistant d'aide View Helper et Action :) Les assistants de vue utilisent-ils également la méthode directe()? Pour view helper, cela devrait être session(), n'est-ce pas? – takeshin

+1

Désolé. C'est censé être un assistant d'action! J'ai mis à jour le code. –

0

Vous devez initialiser votre session dans le bootstrap. Vous pouvez soit le placer dans Zend_Registry et y accéder de la sorte, soit depuis vos contrôleurs vous pouvez accéder à votre bootstrap en appelant $ this-> getInvokeArg ('bootstrap').

// in your controllers  
public function init() 
{ 
    $bootstrap = $this->getInvokeArg('bootstrap'); 
    $this->_session = $bootstrap->getResource('session'); 
} 
Questions connexes