Zend Framework

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 03-03-2012 01:13:04

mbret
Nouveau membre
Date d'inscription: 03-03-2012
Messages: 5

Variables communes aux controlleurs et aux vues.

Bonsoir à tous,

Apres de nombreuses recherche je n'ai toujours pas trouvé exactement de réponse à mon problème.

Je vous explique brièvement le fonctionnement de ce que j'aimerais éclaircir avec vous :


Sur mon site lorsque qu'un utilisateur est connecté une variable session est crée contenant l'id.

De manière général je crée une variable de vue de type array que j'appel viewer.

Cette variable viewer contient l'ip de l'utilisateur ainsi que d'autres informations.
Quand l'utilisateur est connecté cette variable viewer est amélioré (informations de l'utilisateur connecté).

Première question, est - ce une bonne pratique ?
Deuxième, ou pourrai-je gérer cette initialisation de variable pour mes vues ?

Ensuite j'aimerai partager un objet user (correspondant à un modèle) qui serais instancié grâce à l'id en session et partager ce modèle user à tous les controlleurs.


Actuellement je fais comme ça :
J'ai étendu tous les controlleurs pour que la même méthode init() soit appelé.
Cette méthode init() crée un variable connected_user ainsi qu'une variable de vue viewer.

Voici le code :

Code:

abstract class My_Controller_Action extends Zend_Controller_Action
{
    protected $_connectedUser;
    protected $_nameSpace;
    
    protected $_dbTableTag;
    protected $_dbTableTypeTag;
    protected $_dbTableImg;
    protected $_dbTableUser;
    protected $_dbTableComment;
    
    public function init()
    {
        $this->_dbTableImg = new Application_Model_DbTable_Img();
        $this->_dbTableUser = new Application_Model_DbTable_User();
        $this->_dbTableTag = new Application_Model_DbTable_Tag();
        $this->_dbTableTypeTag = new Application_Model_DbTable_TypeTag();
        $this->_dbTableComment = new Application_Model_DbTable_Comment();
        
        /**
         * Creation d'un objet connectedUser si l'utilisateur est connecté
         * Envoi à la vue d'un tableau representant l'utilisateur regardant (viewer)
         */
        $this->_nameSpace = new Zend_Session_Namespace('xBoard');
        if(isset($this->_nameSpace->user)){
            try{
                $this->_connectedUser = $this->_dbTableUser->findUserById($this->_nameSpace->user);
                if(is_null($this->_connectedUser)){
                    throw new Exception("Utilisateur introuvable");
                }
                // Récupération d'un viewer
                $this->view->viewer = array(); // Pou rle modifier plus tard
                $this->view->viewer = array(
                    'id' => $this->_connectedUser->getId(),
                    'preferences' => array(
                        'showPersonalData' => (bool)$this->_connectedUser->getPreferences('showPersonalData')
                    ),
                    'access' => array(
                        'name' => $this->_connectedUser->getAccess()->getName(),
                        'tag_remove' => $this->_connectedUser->getAccess()->tagRemove(),
                        'typeTag_remove' => $this->_connectedUser->getAccess()->typeTagRemove(),
                        'typeTag_edit' => $this->_connectedUser->getAccess()->typeTagEdit(),
                        'tag_edit' => $this->_connectedUser->getAccess()->tagEdit(),
                        'user_edit' => $this->_connectedUser->getAccess()->userEdit(),
                        'user_remove' => $this->_connectedUser->getAccess()->userRemove()
                    ),
                );
            }
            catch(Exception $e){
                unset($this->_nameSpace->user);
                $this->_nameSpace->error = $e->getMessage();
                $this->_helper->redirector('index', 'img');
            }
        }
        
etc...

Est-ce une bonne pratique que tout cela ? Quel est le meilleur endroit pour le mettre ?
Entre bootstrap, plugin helpers je suis perdu..

Actuellement ça marche mais je sais pas si c'est conceptuellement correct et surtout j'utilise la pile d'action pour gérer ma sidebar header, footer etc ce qui fait que pour une page j'ai parfois cette méthode init appelé plusieurs fois car les action correspondante sont appelé.
Une pour le content une pour la sidebar, une pour le header etc.
Bonne soirée, Maxime.

Hors ligne

 

#2 04-03-2012 12:50:57

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1101

Re: Variables communes aux controlleurs et aux vues.

Salut, personnellement j'aurai fait de la même manière que toi, un contrôleur générique qui étend le contrôleur de Zend pour y renseigner des paramètres d'initialisation commun. De cette façon tu peux avoir plusieurs type de contrôleur générique (un pour la partie admin avec des vérifications en plus par exemple etc ...)

Pour le reste ça me semble plutôt correct mais je ne saurais te répondre puisque je n'en suis pas certain big_smile


ZendFramework 2 Certified Architect

Hors ligne

 

#3 04-03-2012 22:08:10

mbret
Nouveau membre
Date d'inscription: 03-03-2012
Messages: 5

Re: Variables communes aux controlleurs et aux vues.

Merci de ta réponse wink

Pour le problème de la sidebar footer et header j'ai finalement opté pour des render().

Du coup j'ai plus les problèmes d'init() appelé plusieurs fois pour les contrôleurs mais par contre je peu plus effectuer d’action spéciales pour ces segments hmm

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