Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 18-09-2007 20:35:03

zudre
Membre
Date d'inscription: 10-05-2007
Messages: 21

Zend_Controller Plugin RESOLU

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

Code:

$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...

Code:

$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

 

#2 18-09-2007 20:42:47

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Zend_Controller Plugin RESOLU

pourquoi ne pas surcharger simplement la méthode predispatch ??

A+JYT

Hors ligne

 

#3 18-09-2007 20:54:26

zudre
Membre
Date d'inscription: 10-05-2007
Messages: 21

Re: Zend_Controller Plugin RESOLU

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

 

#4 18-09-2007 21:44:57

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Zend_Controller Plugin RESOLU

il te suffit de l'écrire dans tes controleurs

Hors ligne

 

#5 18-09-2007 21:53:11

zudre
Membre
Date d'inscription: 10-05-2007
Messages: 21

Re: Zend_Controller Plugin RESOLU

c'est une option

Hors ligne

 

#6 19-09-2007 02:36:14

zudre
Membre
Date d'inscription: 10-05-2007
Messages: 21

Re: Zend_Controller Plugin RESOLU

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

 

#7 19-09-2007 09:00:07

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Zend_Controller Plugin RESOLU

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


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

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