Bonjour à tous,

Après 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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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.