| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344 |
- <?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>
|