[ZF-10089] Zend_Log
[zend.git] / documentation / manual / fr / module_specs / Zend_Controller-Modular.xml
blobed03176fc822a6bf1252a5b254c5f3fcc6dd06db
1 <?xml version="1.0" encoding="utf-8"?>
2 <!-- EN-Revision: 20765 -->
3 <!-- Reviewed: no -->
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>
10         <para>
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&#160;:
14         </para>
16         <programlisting language="php"><![CDATA[
17 docroot/
18     index.php
19 application/
20     default/
21         controllers/
22             IndexController.php
23             FooController.php
24         models/
25         views/
26             scripts/
27                 index/
28                 foo/
29             helpers/
30             filters/
31     blog/
32         controllers/
33             IndexController.php
34         models/
35         views/
36             scripts/
37                 index/
38             helpers/
39             filters/
40     news/
41         controllers/
42             IndexController.php
43             ListController.php
44         models/
45         views/
46             scripts/
47                 index/
48                 list/
49             helpers/
50             filters/
51 ]]></programlisting>
53         <para>
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&#160;: "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é
59             dans ce chapitre.
60         </para>
62         <note>
63             <title>Pas de namespace pour le module par défaut</title>
64             <para>
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.
68             </para>
69         </note>
71         <para>Alors, comment utiliser une structure telle que celle-ci&#160;?</para>
72     </sect2>
74     <sect2 id="zend.controller.modular.directories">
75         <title>Spécification des dossiers de modules</title>
77         <para>
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.
83         </para>
85         <para>
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&#160;:
91         </para>
93         <programlisting language="php"><![CDATA[
94 $front->setControllerDirectory(array(
95       'default' => '/path/to/application/controllers',
96       'blog'    => '/path/to/application/blog/controllers'
97 ));
98 ]]></programlisting>
100         <para>
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>
105         </para>
107         <programlisting language="php"><![CDATA[
108 $front->addControllerDirectory('/path/to/application/news/controllers',
109                                'news');
110 ]]></programlisting>
112         <para>
113             Enfin, si vous avez un dossier spécial regroupant tous vos modules, indiquez le
114             grâce à <methodname>addModuleDirectory()</methodname>&#160;:
115         </para>
117         <programlisting language="php"><![CDATA[
119  * Sur cet exemple :
120  * application/
121  *     modules/
122  *         default/
123  *             controllers/
124  *         foo/
125  *             controllers/
126  *         bar/
127  *             controllers/
128  */
129 $front->addModuleDirectory('/path/to/application/modules');
130 ]]></programlisting>
132         <para>
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>
136         </para>
138         <para>
139             Si le dossier "controllers" ne vous convient pas, changez son nom à l'aide de
140             <methodname>setModuleControllerDirectoryName()</methodname>&#160;:
141         </para>
143         <programlisting language="php"><![CDATA[
145  * Le dossier des contrôleurs s'appelle désormais 'con'
146  * application/
147  *     modules/
148  *         default/
149  *             con/
150  *         foo/
151  *             con/
152  *         bar/
153  *             con/
154  */
155 $front->setModuleControllerDirectoryName('con');
156 $front->addModuleDirectory('/path/to/application/modules');
157 ]]></programlisting>
159         <note>
160             <para>
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>.
164             </para>
165         </note>
166     </sect2>
168     <sect2 id="zend.controller.modular.router">
169         <title>Routage des modules</title>
171         <para>
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&#160;:
175         </para>
177         <itemizedlist>
178             <listitem>
179                 <para><code>:module/:controller/:action/*</code></para>
180             </listitem>
181             <listitem>
182                 <para><code>:controller/:action/*</code></para>
183             </listitem>
184         </itemizedlist>
186         <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.
190         </para>
191     </sect2>
193     <sect2 id="zend.controller.modular.defaultcontroller">
194         <title>Module ou contrôleur Default global</title>
196         <para>
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
202             utilisé.
203         </para>
205         <para>
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&#160;:
209         </para>
211         <programlisting language="php"><![CDATA[
212 $front->setParam('useDefaultControllerAlways', true);
213 ]]></programlisting>
214     </sect2>
215 </sect1>