Programmer's Reference Guide
Les conventions de dossiers vous permettent de séparer les différentes applications MVC dans des unités isolées et les réutiliser dans le contrôleur frontal. Voici une illustration :
docroot/
index.php
application/
default/
controllers/
IndexController.php
FooController.php
models/
views/
scripts/
index/
foo/
helpers/
filters/
blog/
controllers/
IndexController.php
models/
views/
scripts/
index/
helpers/
filters/
news/
controllers/
IndexController.php
ListController.php
models/
views/
scripts/
index/
list/
helpers/
filters/
Ci dessus, le nom du module est utilisé comme préfixe pour les contrôleurs qu'il possède. Il y a donc trois contrôleurs : "Blog_IndexController", "News_IndexController", et "News_ListController". Deux contrôleurs dans le module par défaut sont aussi définis, "IndexController" et "FooController". Ceux-ci ne possèdent pas le nom du module dans leur nom. Cet exemple d'arborescence conseillée sera utilisé dans ce chapitre.
![]() |
Pas de namespace pour le module par défaut |
|---|---|
Notez que dans le module par défaut, les contrôleurs n'ont pas besoin d'être préfixés par le nom du module ("Default_"). Ils sont simplement dispatchés tels quels. Ce n'est pas le cas pour les autres contrôleurs. |
Alors, comment utiliser une structure telle que celle-ci ?
La première chose à faire est d'indiquer au contrôleur frontal où se trouvent les dossiers contenant les
contrôleurs d'action. Passez un array ou une string à
setControllerDirectory(), ou alors une string à addControllerDirectory().
Si vous utilisez les modules, ces appels de méthodes changent quelque peu.
Pour setControllerDirectory(), un tableau est requis. Les paires clé/valeur représentent le
nom du module, et le chemin des contrôleurs. La clé default est utilisée pour indiquer les
contrôleurs globaux (dont le nom ne comporte pas le module). Chaque option doit comporter une indication vers un
chemin, et la clé default doit être présente :
$front->setControllerDirectory(array(
'default' => '/path/to/application/controllers',
'blog' => '/path/to/application/blog/controllers'
));
addControllerDirectory() prend en paramètre une string décrivant un chemin vers
des contrôleurs. Si vous voulez indiquer un module, passez le en second paramètre. Sinon, le chemin sera ajouté
au module default.
$front->addControllerDirectory('/path/to/application/news/controllers', 'news');
Enfin, si vous avez un dossier spécial regroupant tous vos modules, indiquez le grâce à
addModuleDirectory():
/**
* Sur cet exemple :
* application/
* modules/
* default/
* controllers/
* foo/
* controllers/
* bar/
* controllers/
*/
$front->addModuleDirectory('/path/to/application/modules');
Dans le code ci dessus, vous déclarez 3 modules en une méthodes. Celle-ci s'attend à la structure
comprenant les modules default, foo, et bar, chacun devant posséder un
dossier controllers
Si le dossier "controllers" ne vous convient pas, changez son nom à l'aide de
setModuleControllerDirectoryName() :
/**
* Le dossier des contrôleurs s'appelle désormais 'con'
* application/
* modules/
* default/
* con/
* foo/
* con/
* bar/
* con/
*/
$front->setModuleControllerDirectoryName('con');
$front->addModuleDirectory('/path/to/application/modules');
![]() |
Note |
|---|---|
Si vos dossiers de modules ne doivent pas utiliser de sous dossier pour les contrôleurs, alors passez
une valeur vide à |
La route par défaut, Zend_Controller_Router_Rewrite est un objet de type
Zend_Controller_Router_Route_Module. Cette route traite les schémas de routage suivants :
:module/:controller/:action/*:controller/:action/*
Ainsi, elle va trouver les contrôleurs et actions, avec ou sans module les précédant. Un module ne sera trouvé que si sa clé existe dans le tableau d'options passé au contrôleur frontal ou au dispatcheur.
Dans le routeur par défaut, si aucun contrôleur n'est indiqué dans l'URL, un contrôleur par défaut sera
utilisé (IndexController, sauf si l'on décide de changer ce paramètre). Avec des modules indiqués
dans l'URL, si aucun contrôleur n'est indiqué, alors le dispatcheur cherchera dans le module demandé le
contrôleur par défaut. Si celui-ci est absent, c'est celui du module "default" qui sera utilisé.
Si vous voulez renvoyer directement vers le contrôleur par défaut du module "default", passez le paramètre
useDefaultControllerAlways à true dans le contrôleur frontal:
$front->setParam('useDefaultControllerAlways', true);
Search the Manual
Components
Languages Available
Translation Status Reports
View the current status report of Zend Framework manual translations.

![[Note]](/images/note.gif)