Escolar Documentos
Profissional Documentos
Cultura Documentos
par Matthew Weier O'Phinney (Phly, boy, phly - the weblog and site of Matthew Weier O'Phinney) (Blog) Julien Pauli (Tutoriels, article et confrences PHP et developpement web) (Blog)
Le systme MVC de Zend Framework propose une architecture souple, matrialise entres autres par la possibilit de crer des plugins de contrleur frontal, et des aides d'action. Nous allons voir en quoi ces 2 entits sont utiles, leur fonctionnement, et leurs diffrences. Cet atelier est une traduction des articles de Matthew Weier O'Phinney, ils sont disponibles ici et l.
Atelier Zend Framework : MVC, les plugins et les aides d'action par Matthew Weier O'Phinney (Phly, boy, phly - the weblog and site of Matthew Weier O'Phinney) (Blog) Julien Pauli (Tutoriels, article et confrences PHP et developpement web) (Blog)
I - Les aides d'action (ActionHelpers).........................................................................................................................3 I-A - Les bases...................................................................................................................................................... 3 I-B - La mthode direct()....................................................................................................................................... 3 I-C - La gestion des vnements.......................................................................................................................... 4 I-D - Enregistrer des aides dans le gestionnaire...................................................................................................4 I-E - Rcuprer statiquement des aides du gestionnaire......................................................................................5 I-F - Crer votre propre aide................................................................................................................................. 5 II - Les plugins de contrleur frontal (FrontController Plugins)...................................................................................8 II-A - Dfinition....................................................................................................................................................... 8 II-B - Enregistrer et rcuprer un plugin avec le contrleur frontal....................................................................... 8 II-C - Les plugins internes pr-enregistrs............................................................................................................ 9 II-D - Exemples d'utilisation de plugins................................................................................................................. 9 II-D-1 - Plugin d'initialisation de MVC.............................................................................................................. 9 II-D-2 - Plugin de gestion de cache............................................................................................................... 10 II-E - Utiliser plusieurs actions (forward)........................................................................................................12 III - Conclusion.......................................................................................................................................................... 14
-2Copyright 2008 - Julien Pauli. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://julien-pauli.developpez.com/tutoriels/zend-framework/atelier/mvc-plugins-actionhelpers/
Atelier Zend Framework : MVC, les plugins et les aides d'action par Matthew Weier O'Phinney (Phly, boy, phly - the weblog and site of Matthew Weier O'Phinney) (Blog) Julien Pauli (Tutoriels, article et confrences PHP et developpement web) (Blog)
Ceci est possible, mais est trs souvent une solution bancale, dans la mesure o il est trs rare que toutes vos actions aient besoin de toutes les fonctionnalits ajoutes par hritage. Souvent, seule une partie des mthodes ajoutes va servir pour certains contrleurs, alors qu'une autre partie servira pour d'autres contrleurs ; cependant, tous les contrleurs hritent de toutes les mthodes... La solution : utiliser des aides d'action. Leur rle est de permettre un ajout de fonctionnalits prcises, pour des contrleurs prcis, parmi le lot. Ainsi, les aides d'actions ne sont charges qu' leur utilisation, et non en permanence. Les aides d'actions sont encapsules dans un gestionnaire d'aide, matrialis par la classe Zend_Controller_Action_HelperBroker. Cette classe sert de registre permanent, et de fabrique, afin de charger les aides la demande. Par dfaut, l'attribut $_helper de la classe Zend_Controller_Action contient une instance du gestionnaire d'aides. Lorsque nous utilisons une aide, le gestionnaire lui passe l'instance du contrleur d'action actuel, et l'aide peut donc intragir avec celui-ci. Ainsi, l'aide peut appeler des mthodes publiques du contrleur d'action (ou accder ses attributs publics), et inversement. En rgle gnrale, nous appelons notre aide en utilisant la dernire partie du nom de la classe la reprsentant. Par exemple, une aide dont la classe est 'Foo_Helper_Bar', s'appelle par 'bar'. Pour la rcuprer, nous passons soit par une proprit de la classe d'action, soit via sa mthode getHelper() : rcupration d'une aide d'action
$bar = $this->_helper->bar; $bar = $this->_helper->getHelper('bar');
-3Copyright 2008 - Julien Pauli. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://julien-pauli.developpez.com/tutoriels/zend-framework/atelier/mvc-plugins-actionhelpers/
Atelier Zend Framework : MVC, les plugins et les aides d'action par Matthew Weier O'Phinney (Phly, boy, phly - the weblog and site of Matthew Weier O'Phinney) (Blog) Julien Pauli (Tutoriels, article et confrences PHP et developpement web) (Blog)
Utiliser la mthode direct() dans l'aide permet donc un appel 'virtuel' direct celle-ci depuis la classe d'action principale : trs pratique.
"Seulement si une instance de l'aide existe dans le gestionnaire" : les appels se font donc la demande, sur les aides enregistres dans le gestionnaire. Prenons titre d'exemple l'aide ViewRenderer, qui est active par dfaut dans Zend Framework, elle utilise les vnements suivants : 1 2 init(): L'aide initialise un objet de vue, configure le script de vue rendre, les chemins vers les aides et les filtres de vue, et enregistre l'objet vue comme proprit "view" dans l'action actuelle. postDispatch(): determine si une vue doit tre rendue, et si c'est le cas, rend la bonne vue en fonction de l'action appele, dans le segment de rponse appropri.
Un autre exemple : nous pourrions utiliser l'vnement preDispatch() dans une aide quelconque pour vrifier un attribut public du contrleur d'action actuel afin de dterminer quelle action requiert une authentification, et ainsi rediriger vers un formulaire de login appropri le cas chant. C'est mieux qu'un plugin (voir aprs), car l'aide agirait uniquement sur l'action actuelle.
Aussi, vous pouvez spcifier au gestionnaire un prfixe de classe, il saura alors trouver les aides de lui-mme :
// Par prfixe de classe: Zend_Controller_Action_HelperBroker::addPrefix('Foo_Helper'); // Si les classes ne sont pas dans l'include_path, spcifiez un chemin en plus du prfixe : Zend_Controller_Action_HelperBroker::addPath($path, 'Foo_Helper');
Ajouter un chemin ou un prfixe ne fait que dire au gestionnaire o se trouvent les classes d'aide, il ne va pas les instancier. Si vous avez instanci manuellement une aide avant le dispatching, vous devrez alors la passer au gestionnaire pour qu'elle soit enregistre dans les actions futures, ou alors demander au gestionnaire de vous retourner une aide spcifique en l'instanciant, par la mme occasion.
-4Copyright 2008 - Julien Pauli. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://julien-pauli.developpez.com/tutoriels/zend-framework/atelier/mvc-plugins-actionhelpers/
Atelier Zend Framework : MVC, les plugins et les aides d'action par Matthew Weier O'Phinney (Phly, boy, phly - the weblog and site of Matthew Weier O'Phinney) (Blog) Julien Pauli (Tutoriels, article et confrences PHP et developpement web) (Blog)
Le gestionnaire d'aide va alors instancier l'objet de l'aide s'il n'existait pas, et le retourner dans le cas contraire. Il s'agit ainsi de la mme instance.
-5Copyright 2008 - Julien Pauli. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://julien-pauli.developpez.com/tutoriels/zend-framework/atelier/mvc-plugins-actionhelpers/
Atelier Zend Framework : MVC, les plugins et les aides d'action par Matthew Weier O'Phinney (Phly, boy, phly - the weblog and site of Matthew Weier O'Phinney) (Blog) Julien Pauli (Tutoriels, article et confrences PHP et developpement web) (Blog)
Ce code doit tre plac dans un fichier appel 'FormLoader.php', situ dans le dossier 'My/Helper/', lui-mme dans l'include_path. Bien, comment l'utiliser maintenant ? Imaginons que nous sommes dans le module par dfaut, et dans un contrleur d'action LoginController. Nous voulons charger le formulaire 'login'. Nous le nommerons 'Form_Login', et placerons sa classe dans 'forms/Login.php', dans le dossier de l'application :
Dans notre code d'amorage (bootstrap), nous nous assureons que le gestionnaire d'aides d'action trouvera l'aide en question :
Zend_Controller_Action_HelperBroker::addPrefix('My_Helper');
Puis enfin, dans notre contrleur LoginController, nous pouvons appeler le formulaire grce l'aide d'action :
$loginForm = $this->_helper->formLoader('login');
Beaucoup de travail pour si peu ? Du tout ! Aussi longtemps nous suivrons la rgle de nommage, nous pourrons appeller l'aide pour autant de formulaires que ncessaire. Si dans un contrleur UserController, nous voulons appeler un formulaire d'enregistrement, nous procderons ainsi :
$regForm = $this->_helper->formLoader('registration');
-6Copyright 2008 - Julien Pauli. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://julien-pauli.developpez.com/tutoriels/zend-framework/atelier/mvc-plugins-actionhelpers/
Atelier Zend Framework : MVC, les plugins et les aides d'action par Matthew Weier O'Phinney (Phly, boy, phly - the weblog and site of Matthew Weier O'Phinney) (Blog) Julien Pauli (Tutoriels, article et confrences PHP et developpement web) (Blog)
De plus, une fois que le prfixe est cre et qu'il est enregistr dans le gestionnaire (par exemple 'My_Helper'), nous pouvons ajouter des aides dans le mme dossier, elles suivront la mme rgle de nommage, et le gestionnaire les trouvera et les chargera. Il est clair que les aides d'action nous aident suivre le principe 'DRY' (Don't Repeat Yourself : n'crivez pas deux fois une mme implmentation). Tout ce que nous pensons utiliser encore et encore, nous le dlguons une aide d'action, qui sera disponible pour tous les contrleurs d'action dispatchs. Aprs quelque temps, nous aurons un ensemble de fonctionnalits sous forme de classes, que nous pourrons alors migrer de projet en projet, sans devoir driver (hriter) la classe d'action principale. Flxibilit et extensibilit :-).
-7Copyright 2008 - Julien Pauli. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://julien-pauli.developpez.com/tutoriels/zend-framework/atelier/mvc-plugins-actionhelpers/
Atelier Zend Framework : MVC, les plugins et les aides d'action par Matthew Weier O'Phinney (Phly, boy, phly - the weblog and site of Matthew Weier O'Phinney) (Blog) Julien Pauli (Tutoriels, article et confrences PHP et developpement web) (Blog)
II-A - Dfinition
Dans le Zend Framework, les plugins sont conus pour s'enregistrer et pour couter des vnements particuliers. Ces vnements sont remarquables et importants : le routage de la requte, la boucle de dispatching, le dispatching d'une action... Les voici : 1 2 3 4 5 6 routeStartup(): Avant le routage de la requte ; routeShutdown(): Aprs le routage de la requte ; dispatchLoopStartup(): Avant d'entrer dans la boucle de dispatching ; preDispatch(): Avant de dispatcher un contrleur d'action ; postDispatch(): Aprs avoir dispatch un contrleur d'action ; dispatchLoopShutdown(): Aprs la fin de la boucle de dispatching.
On peut se poser une question lorsqu'on lit cette liste : "Pourquoi y a-t-il distinction entre la fin du routage et l'entre dans la boucle de dispatching, alors que rien ne se passe entre les deux ?". En fait, c'est pour une question conceptuelle, smantique. Nous pourrions vouloir changer le routage juste aprs celui-ci, ou altrer le dispatcheur juste avant son rle (sa boucle). La smantique est diffrente, et avoir ainsi deux vnements distincts permet d'y voir plus clair. Dans le mme genre : "Pourquoi existe-t-il des mthodes vnementielles dispatchLoopStartup/Shutdown() et pre/postDispatch() ?". Tout simplement car nous pouvons mettre en avant la boucle de dispatching. Le routeur n'est appel qu'une seule fois, avant la boucle, alors qu' l'interieur de la boucle, plusieurs actions peuvent s'enchaner, d'o l'importante distinction. Un plugin est une classe qui tend Zend_Controller_Plugin_Abstract. Cette classe abstraite dfinit des mthodes vides pour chacun des vnements. Un plugin devra donc redfinir certaines (ou toutes) de ces mthodes, et le code utile y sera insr. Sauf pour dispatchLoopShutdown(), toutes les mthodes du plugin prennent en paramtre une variable $request, de type Zend_Controller_Request_Abstract (la classe de requte de base dans le MVC de ZF).
Il est donc possible de distinguer les plugins "qui agissent tt", sur les vnements routeStartup(), routeShutdown(), et dispatchLoopStartup(), soit avant l'entre en boucle de dispatching, avant toute action. Ces plugins auront donc un effet sur l'ensemble de l'application. Aussi, nous pouvons l'inverse distinguer les plugins "qui agissent tard", sur les vnements postDispatch() et dispatchLoopShutdown(), qui agissent donc aprs qu'une (ou des) action ait t traite.
-8Copyright 2008 - Julien Pauli. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://julien-pauli.developpez.com/tutoriels/zend-framework/atelier/mvc-plugins-actionhelpers/
Atelier Zend Framework : MVC, les plugins et les aides d'action par Matthew Weier O'Phinney (Phly, boy, phly - the weblog and site of Matthew Weier O'Phinney) (Blog) Julien Pauli (Tutoriels, article et confrences PHP et developpement web) (Blog)
On peut enregistrer un plugin quand on le souhaite, simplement ils n'agiront qu'aprs leur enregistrement, en gnral nous les enregistrerons en bootstrap (configuration du systme MVC). En option, nous pouvons passer un numro pile aux plugins. Ceci permet de spcifier l'ordre dans lequel ils agiront, plus le chiffre est bas, plus tt le plugin agira (avant ses frres).
Il peut quelquefois tre ncessaire de pouvoir rcuprer un plugin enregistr dans le contrleur frontal, pour le configurer aprs son enregistrement, par exemple. La mthode pour a est Zend_Controller_Front::getPlugin() :
Considrons notre premier exemple : initalisation de l'application. D'habitude, nous initialisons l'application dans le bootstrap, souvent appel "index.php". Cependant, ceci mne souvent des fichiers gros, lourds et peu commodes. De mme, il n'est alors pas possible de partager du code de ce fichier entre applications. Pourquoi ne pas dlguer une partie de la configuration un plugin ? Particulirement sur l'vnement routeStartup() :
-9Copyright 2008 - Julien Pauli. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://julien-pauli.developpez.com/tutoriels/zend-framework/atelier/mvc-plugins-actionhelpers/
Atelier Zend Framework : MVC, les plugins et les aides d'action par Matthew Weier O'Phinney (Phly, boy, phly - the weblog and site of Matthew Weier O'Phinney) (Blog) Julien Pauli (Tutoriels, article et confrences PHP et developpement web) (Blog) /** * Constructeur * * @param string $env Execution environment * @return void */ public function __construct($env) { $this->setEnv($env); } /** * Evnement route startup * * @param Zend_Controller_Request_Abstract $request * @return void */ public function routeStartup(Zend_Controller_Request_Abstract $request) { $this->loadConfig() ->initView() ->initDb() ->setRoutes() ->setPlugins() ->setActionHelpers() ->setControllerDirectory(); } // ... }
Les mthodes dcrites dans le plugin sont assez explicites. Nous voyons qu' prsent la boostrap est plus ar, et la gestion de la configuration sera partageable entre applications. La maintenabilit en est ainsi amliore.
Ce plugin va se baser sur deux vnements. D'abord, le routage doit tre termin et la boucle de dispatching pas encore entamme, pour vrifier si la requte peut tre issue du cache, ou non. Ensuite, nous devons cacher lorsque nous sommes certains que toutes les actions sont termines. Les deux vnements appropris sont donc dispatchLoopStartup(), et dispatchLoopShutdown().
- 10 Copyright 2008 - Julien Pauli. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://julien-pauli.developpez.com/tutoriels/zend-framework/atelier/mvc-plugins-actionhelpers/
Atelier Zend Framework : MVC, les plugins et les aides d'action par Matthew Weier O'Phinney (Phly, boy, phly - the weblog and site of Matthew Weier O'Phinney) (Blog) Julien Pauli (Tutoriels, article et confrences PHP et developpement web) (Blog) * @uses Zend_Controller_Plugin_Abstract */ class My_Plugin_Caching extends Zend_Controller_Plugin_Abstract { /** * @var bool Dsactiver le cache ou non */ public static $doNotCache = false; /** * @var Zend_Cache_Frontend */ public $cache; /** * @var string Cl de cache */ public $key; /** * Constructeur: initialise le cache * * @param array|Zend_Config $options * @return void * @throws Exception */ public function __construct($options) { if ($options instanceof Zend_Config) { $options = $options->toArray(); } if (!is_array($options)) { throw new Exception('Invalid cache options; must be array or Zend_Config object'); } if (array('frontend', 'backend', 'frontendOptions', 'backendOptions') != array_keys($options)) { throw new Exception('Invalid cache options provided'); } $options['frontendOptions']['automatic_serialization'] = true; $this->cache = Zend_Cache::factory( $options['frontend'], $options['backend'], $options['frontendOptions'], $options['backendOptions'] ); } /** * Dmarre le cache * * Determine si le cache peut tre charg (cache hit). Si c'est le cas, retourne le contenu du cache * * @param Zend_Controller_Request_Abstract $request * @return void */ public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) { if (!$request->isGet()) { self::$doNotCache = true; return; } $path = $request->getPathInfo(); $this->key = md5($path); if (false !== ($response = $this->getCache())) { $response->sendResponse(); exit; }
- 11 Copyright 2008 - Julien Pauli. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://julien-pauli.developpez.com/tutoriels/zend-framework/atelier/mvc-plugins-actionhelpers/
Atelier Zend Framework : MVC, les plugins et les aides d'action par Matthew Weier O'Phinney (Phly, boy, phly - the weblog and site of Matthew Weier O'Phinney) (Blog) Julien Pauli (Tutoriels, article et confrences PHP et developpement web) (Blog) } /** * Enregistre le cache * * @return void */ public function dispatchLoopShutdown() { if (self::$doNotCache || $this->getResponse()->isRedirect() || (null === $this->key) ) { return; } $this->cache->save($this->getResponse(), $this->key); } public function getCache() { if( ($response = $this->cache->load($this->key)) != false) { return $response; } return false; } }
Pendant dispatchLoopStartup(), le plugin effecture plusieurs traitements. D'abord, il vrifie les pr-conditions : avons nous une requte GET ? Si c'est le cas, il va crer une cl de cache base sur l'URI de la requte, et vrifie si cette cl est en cache et si elle peut tre charge (cache hit). Si c'est le cas, il sert alors la rponse depuis le cache. Dans dispatchLoopShutdown(), nous faisons en sorte de regarder si l'action n'a pas indiqu qu'elle ne voulait pas tre cache, si ce n'est pas une redirection ou si nous ne pouvons calculer la cl. Dans tous les autres cas, nous crons un cache de la rponse cette requte. Comment dire de ne pas mettre en cache telle ou telle requte ? L'attribut statique $doNotCache est l pour cela : Ne pas cacher
My_Plugin_Caching::$doNotCache = true;
Ceci supprime le mcanisme de cache pour la requte HTTP en cours. Pourquoi avoir utilis dispatchLoopStartup() plutt que routeStartup() ? Et bien parce que le cache joue avec l'objet de requte, or celui-ci est altr par le processus de routage. Si plus tard, nous voulions modifier le calcul de la cl de cache, ou ne pas cacher certaines routes mais d'autres, certains modules / actions / contrleurs ... Nous aurions besoin du processus de routage pour tout ceci. Cependant, cet exemple est simple et l juste pour montrer comment utiliser les diffrents vnements des plugins.
- 12 Copyright 2008 - Julien Pauli. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://julien-pauli.developpez.com/tutoriels/zend-framework/atelier/mvc-plugins-actionhelpers/
Atelier Zend Framework : MVC, les plugins et les aides d'action par Matthew Weier O'Phinney (Phly, boy, phly - the weblog and site of Matthew Weier O'Phinney) (Blog) Julien Pauli (Tutoriels, article et confrences PHP et developpement web) (Blog)
Par exemple, pour aiguiller une action sur SearchController::formAction(), il faut procder comme suit :
if ($request->isDispatched()) { // La requte a dja t traite } else { // Nouvelle requte, pas encore traite (dispatche) }
Vous pouvez regarder le couple plugin / aide d'action ActionStack. Son rle est justement de grer une pile d'actions. A chaque itration de la boucle de dispatching, le plugin va supprimer une action de la pile et en demander le dispatch. Il est donc possible de grer une pile d'actions qui s'enchanent.
- 13 Copyright 2008 - Julien Pauli. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://julien-pauli.developpez.com/tutoriels/zend-framework/atelier/mvc-plugins-actionhelpers/
Atelier Zend Framework : MVC, les plugins et les aides d'action par Matthew Weier O'Phinney (Phly, boy, phly - the weblog and site of Matthew Weier O'Phinney) (Blog) Julien Pauli (Tutoriels, article et confrences PHP et developpement web) (Blog)
III - Conclusion
Question trs prise : dans quel cas utiliser un plugin, et dans quel cas utiliser une aide d'action ? C'est trs simple. Si la fonctionnalit dsire doit intragir d'une manire ou d'une autre avec l'action en cours de dispatching, il est prfrable d'utiliser une aide d'action. Par ailleurs, si la fonctionnalit ne doit tre active que pour certains modules / contrleurs ou actions, l encore, une aide d'action est plus approprie qu'un plugin. En revanche, si la fonctionnalit est relative l'application dans son ensemble (comme la gestion du cache par exemple), alors un plugin est mieux indiqu. Les plugins et les aides d'action rpondent des design patterns et des modles connus de dlagation de responsabilit, ils sont dans la parfaite ligne du Zend Framework. Ils servent ajouter des fonctionnalits l'ensemble du modle MVC, tout en enlevant la tentation de devoir driver une classe (hritage) importante de ce modle (par exemple Zend_Controller_Front ou Zend_Controller_Action). Ainsi, il est trs simple d'ajouter une fonctionnalit, mais aussi de la retirer, temporairement, pour des tests par exemple, ce qui n'est par dfinition pas le cas de l'hritage.
- 14 Copyright 2008 - Julien Pauli. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://julien-pauli.developpez.com/tutoriels/zend-framework/atelier/mvc-plugins-actionhelpers/