1 <?xml version="1.0" encoding="utf-8"?>
2 <!-- EN-Revision: 20765 -->
4 <sect1 id="zend.controller.modular">
5 <title>Utilisation de conventions de dossiers modulaires</title>
7 <sect2 id="zend.controller.modular.introduction">
8 <title>Introduction</title>
11 Les conventions de dossiers vous permettent de séparer les différentes
12 applications <acronym>MVC</acronym> dans des unités isolées et les réutiliser dans le contrôleur frontal.
13 Voici une illustration :
16 <programlisting language="php"><![CDATA[
54 Ci dessus, le nom du module est utilisé comme préfixe pour les contrôleurs qu'il
55 possède. Il y a donc trois contrôleurs : "Blog_IndexController",
56 "News_IndexController", et "News_ListController". Deux contrôleurs dans le module par
57 défaut sont aussi définis, "IndexController" et "FooController". Ceux-ci ne possèdent
58 pas le nom du module dans leur nom. Cet exemple d'arborescence conseillée sera utilisé
63 <title>Pas de namespace pour le module par défaut</title>
65 Notez que dans le module par défaut, les contrôleurs n'ont pas besoin d'être
66 préfixés par le nom du module ("Default_"). Ils sont simplement distribués tels
67 quels. Ce n'est pas le cas pour les autres contrôleurs.
71 <para>Alors, comment utiliser une structure telle que celle-ci ?</para>
74 <sect2 id="zend.controller.modular.directories">
75 <title>Spécification des dossiers de modules</title>
78 La première chose à faire est d'indiquer au contrôleur frontal où se trouvent les
79 dossiers contenant les contrôleurs d'action. Passez un <code>array</code> ou une
80 <code>string</code> à <methodname>setControllerDirectory()</methodname>, ou alors une
81 <code>string</code> à <methodname>addControllerDirectory()</methodname>. Si vous utilisez les
82 modules, ces appels de méthodes changent quelque peu.
86 Pour <methodname>setControllerDirectory()</methodname>, un tableau est requis. Les paires
87 clé/valeur représentent le nom du module, et le chemin des contrôleurs. La clé
88 <code>default</code> est utilisée pour indiquer les contrôleurs globaux (dont le nom ne
89 comporte pas le module). Chaque option doit comporter une indication vers un chemin, et
90 la clé <code>default</code> doit être présente :
93 <programlisting language="php"><![CDATA[
94 $front->setControllerDirectory(array(
95 'default' => '/path/to/application/controllers',
96 'blog' => '/path/to/application/blog/controllers'
101 <methodname>addControllerDirectory()</methodname> prend en paramètre une <code>string</code>
102 décrivant un chemin vers des contrôleurs. Si vous voulez indiquer un module, passez le
103 en second paramètre. Sinon, le chemin sera ajouté au module
104 <code>default.</code>
107 <programlisting language="php"><![CDATA[
108 $front->addControllerDirectory('/path/to/application/news/controllers',
113 Enfin, si vous avez un dossier spécial regroupant tous vos modules, indiquez le
114 grâce à <methodname>addModuleDirectory()</methodname> :
117 <programlisting language="php"><![CDATA[
129 $front->addModuleDirectory('/path/to/application/modules');
133 Dans le code ci dessus, vous déclarez 3 modules en une méthodes. Celle-ci
134 s'attend à la structure comprenant les modules <code>default</code>, <code>foo</code>,
135 et <code>bar</code>, chacun devant posséder un dossier <code>controllers</code>
139 Si le dossier "controllers" ne vous convient pas, changez son nom à l'aide de
140 <methodname>setModuleControllerDirectoryName()</methodname> :
143 <programlisting language="php"><![CDATA[
145 * Le dossier des contrôleurs s'appelle désormais 'con'
155 $front->setModuleControllerDirectoryName('con');
156 $front->addModuleDirectory('/path/to/application/modules');
161 Si vos dossiers de modules ne doivent pas utiliser de sous dossier pour les
162 contrôleurs, alors passez une valeur vide à
163 <methodname>setModuleControllerDirectoryName()</methodname>.
168 <sect2 id="zend.controller.modular.router">
169 <title>Routage des modules</title>
172 La route par défaut, <classname>Zend_Controller_Router_Rewrite</classname> est un
173 objet de type <classname>Zend_Controller_Router_Route_Module</classname>. Cette route
174 traite les schémas de routage suivants :
179 <para><code>:module/:controller/:action/*</code></para>
182 <para><code>:controller/:action/*</code></para>
187 Ainsi, elle va trouver les contrôleurs et actions, avec ou sans module les
188 précédant. Un module ne sera trouvé que si sa clé existe dans le tableau d'options
189 passé au contrôleur frontal ou au distributeur.
193 <sect2 id="zend.controller.modular.defaultcontroller">
194 <title>Module ou contrôleur Default global</title>
197 Dans le routeur par défaut, si aucun contrôleur n'est indiqué dans l'URL, un
198 contrôleur par défaut sera utilisé (<code>IndexController</code>, sauf si l'on décide
199 de changer ce paramètre). Avec des modules indiqués dans l'URL, si aucun contrôleur
200 n'est indiqué, alors le distributeur cherchera dans le module demandé le contrôleur par
201 défaut. Si celui-ci est absent, c'est celui du module "default" qui sera
206 Si vous voulez renvoyer directement vers le contrôleur par défaut du module
207 "default", passez le paramètre <code>useDefaultControllerAlways</code> à
208 <constant>TRUE</constant> dans le contrôleur frontal :
211 <programlisting language="php"><![CDATA[
212 $front->setParam('useDefaultControllerAlways', true);