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] 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] 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] 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] Note
Cette section n'est pas encore terminée. Elle est encore en construction et est sujette aux changements.