# Zend_Controller - Démarrage rapide

## Introduction

`Zend_Controller` est le coeur du système MVC de Zend Framework. MVC équivaut à Modèle-Vue-Contrôleuret est un motif de conception ("design pattern") visant à séparer la logique d'application de la logique d'affichage. `Zend_Controller_Front` implémente un modèle de contrôleur frontal ("Front Controller"), 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é.

Le système `Zend_Controller` 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.

## Démarrage rapide

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.

### Créer votre disposition de système de fichiers

La première étape est de créer votre disposition de système de fichiers. La disposition typique est la suivante :

    application/
        controllers/
            IndexController.php
        models/
        views/
            scripts/
                index/
                    index.phtml
            helpers/
            filters/
    html/
        .htaccess
        index.php

### Régler votre document root

Dans votre serveur Web, faîtes pointer votre "document root" vers le dossier `html` du système de fichiers ci-dessus.

### Créer vos règles de réécriture

Éditez le fichier `html/.htaccess` afin de lire ceci :

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]

#### Connaître mod_rewrite

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 pour en apprendre davantage concernant mod_rewrite.

Si vous avez IIS 7.0, utilisez ceci pour votre configuration de réécriture :

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

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.

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 documentation du routeur.

### Créer votre fichier d'amorçage (bootstrap)

Le fichier d'amorçage est la page vers laquelle toutes les demandes sont dirigées -- `html/index.php` dans ce cas-ci. Ouvrez `html/index.php` dans l'éditeur de votre choix et ajouter ce qui suit :

    Zend_Controller_Front::run('/chemin/vers/application/controllers');

Ceci va instancier et distribuer le contrôleur frontal, qui conduira les demandes vers les contrôleurs d'action.

### Créer votre contrôleur d'action par défaut

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 `http://framework.zend.com/roadmap/components`, le chemin est `/roadmap/components`, qui correspondra au contrôleur `roadmap` et à l'action `components`. Si aucune action n'est fournie, l'action `index` est présumé, et si aucun contrôleur n'est fourni, le contrôleur `index` est présumé (suivant la convention Apache qui fait correspondre un `DirectoryIndex` automatiquement).

Le distributeur du `Zend_Controller` 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 `Controller`. Ainsi, dans notre exemple ci-dessus, le contrôleur `roadmap` correspond à la classe `RoadmapController`.

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 `Action` est ajouté. Ainsi, dans notre exemple ci-dessus, l'action `components` devient `componentsAction`, et la méthode finale appelée est `RoadmapController::componentsAction()`.

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 `index`. Ouvrez le fichier `application/controllers/IndexController.php`, et entrez ce qui suit :

    /** Zend_Controller_Action */

    class IndexController extends Zend_Controller_Action
    {
        public function indexAction()
        {
            $this->render();
        }
    }

Par défaut, l'aide d'action ViewRendererest 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, `Zend_View` est utilisé en tant que couche Vue dans le MVC. Le `ViewRenderer` utilise le nom du contrôleur (par exemple, `index`) et le nom de l'action courante (par exemple, `index`) pour déterminer le modèle à afficher. Par défaut, le fichier modèle se termine par l'extension `.phtml`, cela signifie que dans l'exemple ci-dessus, le modèle `index/index.phtml` sera rendu. De plus, le `ViewRenderer` suppose automatiquement que le dossier `views` 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 `views/scripts/`. Ainsi le modèle rendu sera trouvé dans `application/views/scripts/index/index.phtml`.

### Créer votre script de vue

Comme mentionné dans la section précédente, les scripts de vue sont dans `application/views/scripts/` ; le script de vue pour le contrôleur et l'action par défaut est donc `application/views/scripts/index/index.phtml`. Créer ce fichier, et saisissez ce HTML :

    <!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>

### Créer votre contrôleur d'erreur

Par défaut, le plugin de gestion des erreursest enregistré. Ce plugin nécessite qu'un contrôleur existe pour gérer les erreurs. Par défaut, il s'agit d'un `ErrorController` dans le module par défaut avec une méthode `errorAction` :

    /** Zend_Controller_Action */

    class ErrorController extends Zend_Controller_Action
    {
        public function errorAction()
        {
        }
    }

En considérant l'architecture des dossiers vu ci-dessus, le fichier sera dans `application/controllers/ErrorController.php`. Vous devez aussi créer une script de vue dans `application/views/scripts/error/error.phtml` ; exemple de contenu possible :

    <!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>

### Voir le site !

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 `exemple.fr` est votre domaine, chacun des URLs suivants vous dirigera vers la page que nous avons tout juste créée :

- `http://exemple.fr/`

- `http://exemple.fr/index`

- `http://exemple.fr/index/index`

Vous êtes maintenant prêt à créer de nouveaux contrôleurs et de nouvelles méthodes d'action. Félicitations !