FAQ Zend Framework
FAQ Zend FrameworkConsultez toutes les FAQ
Nombre d'auteurs : 16, nombre de questions : 39, dernière mise à jour : 15 juin 2021
Dans mon controller, je récupère le nom du module, de l'action, du controller et je l'affecte à mes variables de vue pour pouvoir les afficher ou les tester :
$this
->
view->
module =
$this
->
getRequest()->
getModuleName();
// recupere le module
$this
->
view->
controller =
$this
->
getRequest()->
getControllerName();
// recupere le controller
$this
->
view->
action =
$this
->
getRequest()->
getActionName();
// recupere l'action
Le plugin ErrorHandler est fait pour vous : Zend_Controler_Plugin_ErrorHandler.
Le Zend Framework intègre un système de routage, complémentaire au module mod_rewrite du serveur web Apache. Il est important de comprendre le fonctionnement du routage par défaut inclut dans le framework.
Le premier routage n'est pas dû au Zend Framework, mais au fichier htaccess. En effet, le fichier htaccess doit diriger la plupart des requêtes vers le fichier "bootstrap". Voici le fichier htaccess proposé par la documentation du Zend Framework :
RewriteEngine
on
RewriteCond
%{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteCond
%{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule
.* /index.php
Donc, cette première redirection mène les toutes les requêtes (autres que les fichiers images, CSS et Javascript) vers le fichier index.php, le fichier amorce de l'application.
Dans ce même fichier, le Zend Framework entre en jeu lorsque vous dispatchez l'action, à l'aide du code suivant :
$frontController
->
dispatch();
Le "Front Controller" va, selon un ordre déterminé, chercher le contrôleur correspondant à la requête de l'utilisateur. Tout cela grâce aux "routes".
Par défaut, le Zend Framework définit plusieurs routes génériques. Voici quelques exemples de "routes" gérées par défaut (traduits de la documentation officielle) :
// Si on ajoute quelques modules
$frontController
->
setControllerDirectory(
array(
'
default
'
=>
'
/path/to/default/controllers
'
,
// Les contrôleurs par défaut, lorsque le module n'est pas spécifié
'
forum
'
=>
'
/path/to/forum/controllers
'
,
// Un module forum
'
blog
'
=>
'
/path/to/blog/controllers
'
// Un module blog
)
);
// Exemple avec seulement le module
http:
//exemple/forum
=>
module ==
forum
/*
Dans ce cas, le dispatcheur va chercher un contrôleur IndexController
dans le module 'test'. Hors, ce module n'existe pas. Il va alors chercher un contrôleur 'test', dans le dossier du module 'default'.
*/
http:
//exemple/test
=>
controller ==
test
/*
On spécifie ici le module et le contrôleur.
*/
http:
//exemple/blog/article
=>
module ==
blog
=>
controller ==
article
/*
Dans ce cas, on spécifie à la fois le module, le contrôleur, et l'action.
*/
http:
//exemple/blog/archive/list
=>
module ==
blog
=>
controller ==
archive
=>
action ==
list
/*
En plus du module, du contrôleur et de l'action, on spécifie ici des paramètres.
*/
http:
//exemple/blog/archive/list/sort/alpha/date/desc
=>
module ==
blog
=>
controller ==
archive
=>
action ==
list
=>
sort ==
alpha
=>
date ==
desc
Ces quelques exemples nous montrent que le système de routage du Zend Framework est assez puissant par défaut. Cependant, il vous sera peut être nécessaire de créer un routage plus spécifique. Il est heureusement possible de configurer vos propres routes, à l'aide du routeur.
Bien que la plupart du temps, on utilise des routes dites "dynamiques" (donc avec une partie du lien qui est variable), il se peut que vous ayez besoin de routes statiques. Par exemples, si votre contrôleur s'appelle ContactController, avec une action sendAction, par défaut, on accederait à cette action avec le lien z-f/contact/send, ce qui n'est pas forcément souhaitable. Vous préfereriez peut être y accéder avec un lien du type z-f/Nous-Contacter.
Dans ce genre de situation, on peut facilement créer une route personnalisée :
// On récupère le gestionnaire de routes
$router
=
$frontController
->
getRouter();
// On créé la route statique
$route
=
new Zend_Controller_Router_Route_Static(
'
Nous-Contactez
'
,
array('
controller
'
=>
'
contact
'
,
'
action
'
=>
'
send
'
)
);
// On ajoute la route
$router
->
addRoute('
contact
'
,
$route
);
Ce code est relativement simple : on récupère le gestionnaire de routeur à partir de l'instance du Front Controller, puis, on créé un objet Zend_Controller_Router_Route_Static, qui représente une route statique. Le premier paramètre est le lien d'accès à cette route, donc concrètement, c'est ce paramètre qui représente la route "virtuelle" par laquelle le visiteur accédera à l'action. Le deuxième paramètre est un tableau d'options, comprennant le contrôleur et l'action cibles de cette route.
Enfin, on ajoute la route à la suite de celles existantes, en spécifiant un identifiant de route et l'objet route associé. Ce nom devrait être unique, mais le Zend Framework ne réalise aucune vérification. Si vous utilisez deux fois le même nom, la dernière entrée écrasera les précédentes. Il faut noter que les listes sont ajoutées dans une pile, par conséquent, la dernière ajoutée sera la première récupérée pour déterminer le contrôleur à utiliser.