1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344
|
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.controller.quickstart">
<title>Zend_Controller - Démarrage rapide</title>
<sect2 id="zend.controller.quickstart.introduction">
<title>Introduction</title>
<para>
<classname>Zend_Controller</classname> est le coeur du système <acronym>MVC</acronym> de Zend
Framework. <acronym>MVC</acronym> équivaut à
<ulink url="http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%C3%B4leur">
Modèle-Vue-Contrôleur</ulink>et est un motif de conception ("design pattern") visant à
séparer la logique d'application de la logique d'affichage.
<classname>Zend_Controller_Front</classname> implémente un modèle de
<ulink url="http://www.martinfowler.com/eaaCatalog/frontController.html">contrôleur
frontal ("Front Controller")</ulink>, dans lequel toutes les demandes sont arrêtées par
le contrôleur frontal et distribuées vers différents contrôleurs d'action ("Action
Controller") basés sur l'URL demandé.
</para>
<para>
Le système <classname>Zend_Controller</classname> a été construit dans un souci
d'extensibilité, soit par sous-classement des classes existantes, en écrivant les
nouvelles classes qui implémentent les diverses interfaces et les classes abstraites
qui forment la base de la famille de contrôleur des classes, soit par écriture de
plugins ou d'aides d'action afin d'utiliser ou d'augmenter les fonctionnalités du
système.
</para>
</sect2>
<sect2 id="zend.controller.quickstart.go">
<title>Démarrage rapide</title>
<para>
Si vous avez besoin d'informations plus détaillées, lisez les sections suivantes.
Si vous voulez juste démarrer rapidement, lisez ce qui suit.
</para>
<sect3 id="zend.controller.quickstart.go.directory">
<title>Créer votre disposition de système de fichiers</title>
<para>
La première étape est de créer votre disposition de système de fichiers. La
disposition typique est la suivante :
</para>
<programlisting language="php"><![CDATA[
application/
controllers/
IndexController.php
models/
views/
scripts/
index/
index.phtml
helpers/
filters/
html/
.htaccess
index.php
]]></programlisting>
</sect3>
<sect3 id="zend.controller.quickstart.go.docroot">
<title>Régler votre document root</title>
<para>
Dans votre serveur Web, faîtes pointer votre "document root" vers le dossier
<code>html</code> du système de fichiers ci-dessus.
</para>
</sect3>
<sect3 id="zend.controller.quickstart.go.rewrite">
<title>Créer vos règles de réécriture</title>
<para>Éditez le fichier <code>html/.htaccess</code> afin de lire ceci :</para>
<programlisting language="php"><![CDATA[
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
]]></programlisting>
<note>
<title>Connaître mod_rewrite</title>
<para>
Les règles de réécriture ci-dessus autorisent l'accès à tous fichiers sous la
racine de votre hôte virtuel. Si vous avez des fichiers que vous ne souhaitez
pas exposer, vous pouvez souhaiter restreindre ces règles. Allez sur le site
d'Apache <ulink
url="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html">pour en
apprendre davantage concernant mod_rewrite</ulink>.
</para>
</note>
<para>
Si vous avez <acronym>IIS</acronym> 7.0, utilisez ceci pour votre configuration de réécriture :
</para>
<programlisting language="xml"><![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Imported Rule 1" stopProcessing="true">
<match url="^.*$" />
<conditions logicalGrouping="MatchAny">
<add input="{REQUEST_FILENAME}"
matchType="IsFile" pattern=""
ignoreCase="false" />
<add input="{REQUEST_FILENAME}"
matchType="IsDirectory"
pattern="" ignoreCase="false" />
</conditions>
<action type="None" />
</rule>
<rule name="Imported Rule 2" stopProcessing="true">
<match url="^.*$" />
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
]]></programlisting>
<para>
Les règles ci-dessus vont redirigées toute requête vers des ressources
existantes (liens symboliques, fichiers non vides, ou répertoires non-vides), tout
autre requête sera renvoyée vers le contrôleur frontal.
</para>
<note>
<para>
Les règles de réécriture ci-dessus sont pour Apache ; pour des exemples
de règles de réécriture pour d'autres serveurs Web, reportez-vous à la
<link linkend="zend.controller.router.introduction">documentation du
routeur</link>.
</para>
</note>
</sect3>
<sect3 id="zend.controller.quickstart.go.bootstrap">
<title>Créer votre fichier d'amorçage (bootstrap)</title>
<para>
Le fichier d'amorçage est la page vers laquelle toutes les demandes sont
dirigées -- <code>html/index.php</code> dans ce cas-ci. Ouvrez
<code>html/index.php</code> dans l'éditeur de votre choix et ajouter ce qui
suit :
</para>
<programlisting language="php"><![CDATA[
Zend_Controller_Front::run('/chemin/vers/application/controllers');
]]></programlisting>
<para>
Ceci va instancier et distribuer le contrôleur frontal, qui conduira les
demandes vers les contrôleurs d'action.
</para>
</sect3>
<sect3 id="zend.controller.quickstart.go.controller">
<title>Créer votre contrôleur d'action par défaut</title>
<para>
Avant de discuter des contrôleurs d'action, vous devez d'abord comprendre
comment les requêtes sont dirigées dans Zend Framework. Par défaut, le premier
segment d'un chemin d'URL correspond à un contrôleur, et le second à une action.
Par exemple, l'URL est <code>http://framework.zend.com/roadmap/components</code>,
le chemin est <code>/roadmap/components</code>, qui correspondra au contrôleur
<code>roadmap</code> et à l'action <code>components</code>. Si aucune action n'est
fournie, l'action <code>index</code> est présumé, et si aucun contrôleur n'est
fourni, le contrôleur <code>index</code> est présumé (suivant la convention Apache
qui fait correspondre un <code>DirectoryIndex</code> automatiquement).
</para>
<para>
Le distributeur du <classname>Zend_Controller</classname> prend alors la
valeur du contrôleur et le fait correspondre à une classe. Par défaut, il s'agit du
nom du contrôleur suivi du mot <code>Controller</code>. Ainsi, dans notre exemple
ci-dessus, le contrôleur <code>roadmap</code> correspond à la classe
<code>RoadmapController</code>.
</para>
<para>
De la même manière, la valeur de l'action correspond à une méthode de la
classe contrôleur. Par défaut, la valeur est écrit en minuscule, et le mot
<code>Action</code> est ajouté. Ainsi, dans notre exemple ci-dessus, l'action
<code>components</code> devient <code>componentsAction</code>, et la méthode finale
appelée est <methodname>RoadmapController::componentsAction()</methodname>.
</para>
<para>
Créons maintenant un contrôleur d'action par défaut et une méthode d'action.
Comme noté auparavant, le contrôleur et l'action par défaut sont tous les deux
nommées <code>index</code>. Ouvrez le fichier
<code>application/controllers/IndexController.php</code>, et entrez ce qui suit
:
</para>
<programlisting language="php"><![CDATA[
/** Zend_Controller_Action */
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
$this->render();
}
}
]]></programlisting>
<para>
Par défaut, l'aide d'action
<link linkend="zend.controller.actionhelpers.viewrenderer">ViewRenderer</link>est
activé. Ceci signifie qu'en définissant simplement une méthode d'action et un
script de vue correspondant, vous obtiendrez automatiquement le rendu du contenu.
Par défaut, <classname>Zend_View</classname> est utilisé en tant que couche Vue
dans le <acronym>MVC</acronym>. Le <code>ViewRenderer</code> utilise le nom du contrôleur (par
exemple, <code>index</code>) et le nom de l'action courante (par exemple,
<code>index</code>) pour déterminer le modèle à afficher. Par défaut, le fichier
modèle se termine par l'extension <code>.phtml</code>, cela signifie que dans
l'exemple ci-dessus, le modèle <code>index/index.phtml</code> sera rendu. De plus,
le <code>ViewRenderer</code> suppose automatiquement que le dossier
<code>views</code> situé au même niveau que le dossier des contrôleurs est le
dossier de base des vues, et que les scripts de vues sont dans le sous-dossier
<code>views/scripts/</code>. Ainsi le modèle rendu sera trouvé dans
<code>application/views/scripts/index/index.phtml</code>.
</para>
</sect3>
<sect3 id="zend.controller.quickstart.go.view">
<title>Créer votre script de vue</title>
<para>
Comme mentionné
<link linkend="zend.controller.quickstart.go.controller">dans la section
précédente</link>, les scripts de vue sont dans
<code>application/views/scripts/</code> ; le script de vue pour le contrôleur et
l'action par défaut est donc
<code>application/views/scripts/index/index.phtml</code>. Créer ce fichier, et
saisissez ce HTML :
</para>
<programlisting language="php"><![CDATA[
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>My first Zend Framework App</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
]]></programlisting>
</sect3>
<sect3 id="zend.controller.quickstart.go.errorhandler">
<title>Créer votre contrôleur d'erreur</title>
<para>
Par défaut,
<link linkend="zend.controller.plugins.standard.errorhandler">le plugin de gestion
des erreurs</link>est enregistré. Ce plugin nécessite qu'un contrôleur existe pour
gérer les erreurs. Par défaut, il s'agit d'un <code>ErrorController</code> dans le
module par défaut avec une méthode <code>errorAction</code> :
</para>
<programlisting language="php"><![CDATA[
/** Zend_Controller_Action */
class ErrorController extends Zend_Controller_Action
{
public function errorAction()
{
}
}
]]></programlisting>
<para>
En considérant l'architecture des dossiers vu ci-dessus, le fichier sera dans
<code>application/controllers/ErrorController.php</code>. Vous devez aussi créer
une script de vue dans <code>application/views/scripts/error/error.phtml</code> ;
exemple de contenu possible :
</para>
<programlisting language="php"><![CDATA[
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Erreur</title>
</head>
<body>
<h1>Erreur apparue</h1>
<p>Une erreur est apparue ; veuillez rééssayer plus tard.</p>
</body>
</html>
]]></programlisting>
</sect3>
<sect3 id="zend.controller.quickstart.go.finish">
<title>Voir le site !</title>
<para>
Avec votre premier contrôleur et votre première vue, vous pouvez maintenant
démarrer votre navigateur et aller sur votre site. En supposant que
<code>exemple.fr</code> est votre domaine, chacun des <acronym>URL</acronym>s suivants vous dirigera
vers la page que nous avons tout juste créée :
</para>
<itemizedlist>
<listitem>
<para><code>http://exemple.fr/</code></para>
</listitem>
<listitem>
<para><code>http://exemple.fr/index</code></para>
</listitem>
<listitem>
<para><code>http://exemple.fr/index/index</code></para>
</listitem>
</itemizedlist>
<para>
Vous êtes maintenant prêt à créer de nouveaux contrôleurs et de nouvelles
méthodes d'action. Félicitations !
</para>
</sect3>
</sect2>
</sect1>
|