2.2. Mise en Route
Précédent | Chapitre 2. Zend_Controller | Suivant

## 2.2. Mise en Route

### 2.2.1. Introduction

Le `Zend_Controller` a été construit dans un soucis permanent d'extensibilité, soit en créant des sous-classes de classes existantes, soit en écrivant de nouvelles classes qui implémentent les interfaces `Zend_Controller_Router_Interface` et `Zend_Controller_Dispatcher_Interface`.

### 2.2.2. Configuration Serveur

Le Zend_Controller est construit pour supporter les sites web modernes, avec des URI propres (peu voire pas de paramètres de requêtes). En tant que telle, la configuration du serveur web doit permettre la reformulation des URI afin de rediriger toutes les requêtes sur un même un même fichier, appelé ici "`index.php`", qui va simplement amorcer `Zend_Controller_Front`. Sur les serveurs Web Apache, cela est pris en charge par le module `mod_rewrite`.

La première étape dans la configuration du serveur est d'installer et d'activer le module `mod_rewrite`. L'étape suivante est de mettre deux fichiers dans le document root: `.htaccess` et `index.php`. Le fichier `.htaccess` est utilisé par Apache et doit contenir des règles pour rediriger toutes les requêtes sur `index.php`. Pour les phases de développement, il est souvent plus simple d'écrire une règle `mod_rewrite` qui va rediriger toutes les requêtes sur `index.php`, sauf pour certaines extensions de fichier. Voici un exemple de ce fichier :

    RewriteEngine on
    RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

Dans l'exemple ci-dessus, toutes les requêtes ne contenant pas les extensions mentionnées seront redirigées vers index.php C'est utile pendant les phases de développement, cependant une fois en production, les règles de ré-écriture devront être écrite pour exclure aussi les dossiers.

### 2.2.3. Fichier d'Amorçage

Après avoir mis en place le fichier `.htaccess`, créez un nouveau fichier appelé `index.php`. C'est un fichier d'amorçage. Le but du fichier `index.php` est seulement d'amorcer `Zend_Controller_Front`, qui dans l'idéal, devrait être placé à l'extérieur du répertoire racine.

| Note
Le fichier d'amorçage doit être le seul fichier PHP du répertoire racine.

Pour des raisons de sécurité, Zend préconise de ne stocker aucun fichier PHP dans le répertoire accessible par le serveur Web (ceux-ci sont sous le répertoire racine). Bien que ça ne soit pas toujours possible, comme par exemple dans le cas d'hébergement mutualisés, ceci devrait être considéré comme une bonne pratique et mis en place autant que possible.

Créez le fichier d'amorçage `index.php`, dans le répertoire racine pour amorcer `Zend_Controller_Front`:

    <?php

    require_once 'Zend/Controller/Front.php';

    Zend_Controller_Front::run('/chemin/de/vos/controlleurs');

    ?>

Reportez vous à la prochaine partie pour ce qui concerne `/chemin/de/vos/controlleurs`. Comme définit dans le fichier `README.txt`, le répertoire du Framework Zend doit être dans l'`include_path`. Si ce n'est pas défini dans le `php.ini`, `set_include_path()` peut-être appelée dans ce fichier avant `require_once()`.

| Note
A ce stade, nous sommes en train de rechercher des solutions qui ne nécessite par l'installation de mod_rewrite. Nous envisageons de proposer une configuration pour les systèmes avec ou sans installation de mod_rewrite. Veuillez notez également que ce système n'est pas lié spécifiquement à Apache, tout autre serveur Web ayant des possibilités similaires de redirection devrait suffire.

### 2.2.4. Arborescence des Répertoires

Il est recommandé que les sites Web utilisant le Framework Zend partagent une même arborescence. Bien que cela ne soit pas possible dans tous les cas, il l'est pour beaucoup. Choisir de se conformer à cette structure va rendre votre code plus facilement compréhensible pour quelqu'un de familier avec les conventions du Framework Zend.

L'arborescence proposée consiste en un répertoire contenant les bibliothèques (de Zend ou autre) et un répertoire contenant l'application.

    /application
      /models
      /views
      /controllers
    /document_root
      /images
      /styles
      .htaccess
      index.php
    /library
      /Zend

| Note
Cette section n'est pas encore complète. Elle est encore en construction, et est sujette à changements.

### 2.2.5. IndexController

Chaque site doit définir un contrôleur nommé `IndexController`. C'est le contrôleur qui est utilisé quand aucun contrôleur n'est définit dans l'URI, comme dans cette URI :

    http://framework.zend.com/

La classe `IndexController` doit être enregistrée dans un fichier appelé `IndexController.php`, et elle doit être stockée dans le répertoire des contrôleurs. L'`IndexController` doit être une sous-classe de `Zend_Controller_Action`. Voici un exemple du contenu d'`IndexController` :

    <?php

    require_once 'Zend/Controller/Action.php';

    class IndexController extends Zend_Controller_Action
    {
    	public function indexAction()
    	{
    		echo 'Hello from IndexController';
    	}

    	public function noRouteAction()
    	{
    		$this->_redirect('/');
    	}
    }

    ?>

| Note
Cette section n'est pas encore terminée. Elle est encore en construction et est sujette aux changements.

Précédent | Niveau supérieur | Suivant
Chapitre 2. Zend_Controller | Sommaire | 2.3. Sous-classement