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.
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.
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
Dans votre serveur Web, faîtes pointer votre "document root" vers le dossier
html
du système de fichiers ci-dessus.
É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.
Note
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.
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.
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
.
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>
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>
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 !