<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 15617 -->
<!-- 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 MVC de Zend
            Framework. MVC é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&#160;:
            </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&#160;:</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 IIS 7.0, utilisez ceci pour votre configuration de réécriture&#160;:
            </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&#160;:
            </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 <code>RoadmapController::componentsAction()</code>.
            </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 MVC. 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 URLs 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>
