Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
J'ai une question conçernant le fonctionnement des plugins.
J'utilise le ZendLayout sur la base de ce fichier :
... <div id="left"> <?php echo $this->action('index','user','account') ?> </div> <div id="right"> <?php echo $this->action('read','index','feed',array("url"=>"")) ?> </div> <div id="content"> <?php echo $this->layout()->CONTENT ?> </div> <h1> <?php echo $this->_("lang") ?> : </h1> <?php echo $this->debug ?> </body> </html>
Et je m'apprête à écrire un plugin qui va gérer les accés au différents module/contrôleur, que voici :
<?php class plugin_acl_controller extends Zend_Controller_Plugin_Abstract { public function routeShutdown(Zend_Controller_Request_Abstract $request) { //$this->getResponse()->appendBody("<p>routeShutdown() appelée</p>\n"); $moduleName = $request->getModuleName(); $ctrlName = $request->getControllerName(); $actionName = $request->getActionName(); // Récupérer le auth $auth = Zend_Registry::get("auth"); if(!$auth->hasIdentity()){ $request->setModuleName("default"); $request->setControllerName("index"); $request->setActionName("notlogged"); } }
je constate que mon action principale est bien capturé par mon plugin et me retourne bien un message comme quoi j'ai pas les droits.
Cependant voici ce que je me dis :
- Est-ce que les autres actions dans mon layout ne devrait pas etre capturé également ?
-> si non, comment je devrais m'y prendre ?
- Est-ce que mon code pour le controle d'accés intervient bien au bon moment dans le processus de routage/dispatchage ?
merci pour vos idées
Hors ligne
Est-ce que les autres actions dans mon layout ne devrait pas etre capturé également ?
de quelle action tu parles ? Dans ton code tu ne test aucune action mais seulement si l'utilisateur s'est authentifié. Soit tu parles d'authentification, là on est sur Zend_Auth, ou soit des droits et là c'est Zend_Acl.
En ce qui concerne le plugin, c'est bien mais par contre je n'avais pas encore vu qq'un utilisé le controle d'authenfication par routeShutdown() mais plutot par preDispath(). Ceci dit, je ne sais pas quand est exécuté routeShutdown(), peut-être que ça ne pose pas de pb.
Hors ligne
je me suis peut-être mal exprimé alors je reformule
Je sais que dans mon plugin je ne teste que l'authentification, il ne s'agit que d'un test pour voir si mon plugin agit ou pas sur les différentes actions qui sont appelés. Alors je m'explique par action :
- Quand j'appele une action directement par url :
http://.../module/controller/action
=> mon plugin fonctionne
- Quand j'appele une action par le helper de vue "action" dans le layout
<?php echo $this->action('read','index','feed',array("url"=>"pwet.rss")) ?>
=> Le plugin ne s'applique pas
-> mes questions étaient donc :
Est-ce normal ?
Comment je dois procéder si je veux que mon plugin s'applique sur les actions appelés par le helper de vue "action"?
en espérant avoir été plus clair et en te remerciant pour ton aide
Hors ligne
Hello,
Un plugin est attaché à ton Zend_Controller_Front pas à un Zend_Controller_Action.
A+
Hors ligne
Héhé je comprend mieux mon erreur.
merci mikaelkael
Hors ligne