Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai une question et je ne suis pas certain de m'y prendre de la bonne façon avec les plugins des contrôlleurs.
Voici, j'ai 3 modules: admin, site (default) et profile dans mon boostrap.
Dans les modules admin et profile, j'aimerais ajouter un plugin pour vérifier, avec preDispatch si la personne est enregistrée. Sans plugins, la situation est assez simple
$router = new Zend_Controller_Router_Rewrite(); $router->getRoutes();// returns a rewrite router by default $controller = Zend_Controller_Front::getInstance(); $controller->setControllerDirectory(array( 'default' => PATH_BASE.'/applications/site/controllers', 'admin' => PATH_BASE.'/applications/mediamanager/controllers', 'profile' => PATH_BASE.'/applications/profile/controllers', ) ) ->setRequest($request) ->setRouter($router);
... mais pour ajouter des plugins à admin et profile, est-ce que je dois obligatoirement me débarasser de ma structure pour arriver à ça et avoir ça? J'ai l'impression que de définir 3 fois setControllerDirectory me posera plus de problèmes qu'autre chose...
$controller = Zend_Controller_Front::getInstance(); $controller->setControllerDirectory(array('default' => PATH_BASE.'/applications/site/controllers')) ->setRequest($request) ->setRouter($router); $controller->addControllerDirectory(PATH_BASE.'/applications/mediamanager/controllers', 'admin') ->setRequest($request) ->registerPlugin(new AdminPlugin()) ->setRouter($router); $controller->addControllerDirectory(PATH_BASE.'/applications/profile/controllers', 'profile') ->setRequest($request) ->registerPlugin(new ProfilePlugin()) ->setRouter($router);
Et autre question: où est-ce que je mets le fichier. Certainement pas dans le répertoire Zend/Controller/Plugin!
Ça serait pas logique....
Merci,
Dernière modification par zudre (20-09-2007 02:23:43)
Hors ligne
pourquoi ne pas surcharger simplement la méthode predispatch ??
A+JYT
Hors ligne
Je vois la logique, mais mes connaissances sont de bases...
Par contre, je ne veux pas non plus utiliser le dispatch «général» pour des modules qui ne le requièrent pas.
... et elle est où cette méthode?
Merci
Dernière modification par zudre (18-09-2007 21:16:41)
Hors ligne
il te suffit de l'écrire dans tes controleurs
Hors ligne
c'est une option
Hors ligne
Avec le modèle plus haut, les plugins sont appellés dans l'ordre.
Finalement, ce que j'aimerais, c'est que le plugin ne soit appelé que si le module celui qui est appellé par le dispatcher.
Donc, si le module admin (exemple: http://localhost/admin) est dispatcher, j'aimerais que le plugin AdminPlugin() entre en fonction. Est-ce possible?
Hors ligne
Bonjour,
Ca n'est pas possible d'appeler le preDispatch d'un plugin uniquement quand un module est appelé a priori.
Par contre dans ton plugin, tu as le nom du module appelé ($request->getModuleName()). Ce que je te conseille, c'est de faire un plugin qui est systématiquement appelé et en fonction du nom du module, il charge le bon fichier dans ton module et il lance la méthode de ton choix.
Par contre fais attention, il peut y avoir un autre plugin qui change le nom du module appelé (typiquement un plugin qui vérifierait les droits et orienterait vers un autre module si l'internaute n'a pas les droits nécessaires pour regarder la page). Si tu veux être certain que le module soit "définitivement" choisi, il faut mettre ton test dans un helper et pas un plugin.
A+, Philippe
Hors ligne