Dans le précédent article de la rubrique Zend, nous avons parlé des plugins ou bibliothèques perso, dans celui-ci nous allons voir comment utiliser des plugins de Front Controller.
Un plugin de Front controller est un type de plugin qui permet d’effectuer certaines tâches à des moments clés du cycle MVC. Par exemple il est possible de faire des connexions à des bases de données suivant l’action demandée, vérifier l’authentification de l’utilisateur, ou adapter la langue avant que quoi que ce soit ne soit afficher à l’écran.
Pour ce faire, le framework Zend utilise le design pattern (patron de conception) Front Controller. Le plugin de Front Controller va ainsi insérer des fonctionalités nouvelles dans le processus Front Controller. Afin d’implémenter un tel plugin, il va falloir créer une classe qui étend Zend_Controller_Plugin_Abstract et ainsi disposer des méthodes qui vont permettre d’accrocher notre code aux événements du cycle MVC. Cela reste flou, pour mieux comprendre, voyons les méthodes appelées hooks qui nous permettent de faire ce travail.
Les hooks
- routeStartup()
appelé avant que Zend_Controller_Front n’appelle au routeur qui va évaluer les requêtes sur les routes enregistrées. - routeShutdown()
appelé après que le routeur ait fait son travail. - dispatchLoopStartup()
appelé avant que Zend_Controller_Front entre dans la boucle de dispatch. - preDispatch()
appelé avant qu’une action soit dispatchée par le dispatcher. Utilisé à des fins de proxy ou de filtre. - postDispatch()
appelé après qu’une action soit dispatchée par le dispatcher. Utilisé à des fins de proxy ou de filtre en altérant la requete et re-configurant le flag de dispatch. - dispatchLoopShutdown()
appelé après que Zend_Controller_Front ne sorte de la boucle de dispatch.
On comprend un peu mieux les fonctionalités que l’on peut ajouter à son application en utilisant ces hooks. La prochaine étape de ce tutoriel va consister à écrire notre plugin et à configurer le framework Zend afin de prendre en compte le nouveau plugin.
Créer un Front Controller Plugin
Pour commencer il faut définir un namespace, ceci devrait avoir été fait dans le précédent tutoriel, gardons « Test_ ». Ensuite nous pouvons écrire notre classe Test_MonPluginFC dans le répertoire Test/MonPluginFC.php :
class Test_MonPluginFC extends Zend_Controller_Plugin_Abstract { private function maMethode() { return "(ceci s'affiche depuis une méthode privée du plugin)"; } public function routeStartup(Zend_Controller_Request_Abstract $request) { $this->getResponse() ->appendBody("<p>Méthode routeStartup() appelée ".$this->maMethode()."</p>\n"); } public function routeShutdown(Zend_Controller_Request_Abstract $request) { $this->getResponse() ->appendBody("<p>Méthode routeShutdown() appelée ".$this->maMethode()."</p>\n"); } public function dispatchLoopStartup( Zend_Controller_Request_Abstract $request) { $this->getResponse() ->appendBody("<p>Méthode dispatchLoopStartup() appelée ".$this->maMethode()."</p>\n"); } public function preDispatch(Zend_Controller_Request_Abstract $request) { $this->getResponse() ->appendBody("<p>Méthode preDispatch() appelée ".$this->maMethode()."</p>\n"); } public function postDispatch(Zend_Controller_Request_Abstract $request) { $this->getResponse() ->appendBody("<p>Méthode postDispatch() appelée ".$this->maMethode()."</p>\n"); } public function dispatchLoopShutdown() { $this->getResponse() ->appendBody("<p>Méthode dispatchLoopShutdown() appelée ".$this->maMethode()."</p>\n"); } }
Résultat :
Méthode routeStartup() appelée (ceci s’affiche depuis une méthode privée du plugin)
Méthode routeShutdown() appelée (ceci s’affiche depuis une méthode privée du plugin)
Méthode dispatchLoopStartup() appelée (ceci s’affiche depuis une méthode privée du plugin)
Méthode preDispatch() appelée (ceci s’affiche depuis une méthode privée du plugin)
Méthode postDispatch() appelée (ceci s’affiche depuis une méthode privée du plugin)
Méthode dispatchLoopShutdown() appelée (ceci s’affiche depuis une méthode privée du plugin)
Voilà c’est tout, on peut tester en ce rendant sur notre page et voir apparaitre nos appels aux hooks du Front Controller.
Ces notions de base acquisent, vous verrez tous les avantages de ce type de plugin et le contrôle plus profond et précis que le framework apporte.