Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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 :
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
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
Hors ligne
Merci de ta réponse
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
Hors ligne
Pages: 1