Programmer's Reference Guide

Chapitre 7. Zend_Controller

Table des matières

7.1. Zend_Controller - Démarrage rapide
7.1.1. Introduction
7.1.2. Démarrage rapide
7.1.2.1. Créer votre disposition de système de fichiers
7.1.2.2. Régler votre document root
7.1.2.3. Créer vos règles de réécriture
7.1.2.4. Créér votre fichier d'amorçage (bootstrap)
7.1.2.5. Créer votre contrôleur d'action par défaut
7.1.2.6. Créer votre script de vue
7.1.2.7. Créer votre contrôleur d'erreur
7.1.2.8. Voir le site !
7.2. Fondations de Zend_Controller
7.3. Le contrôleur frontal (Front Controller)
7.3.1. Présentation générale
7.3.2. Méthodes principales
7.3.2.1. getInstance()
7.3.2.2. setControllerDirectory() et addControllerDirectory
7.3.2.3. dispatch()
7.3.2.4. run()
7.3.3. Méthodes d'accès à l'environnement
7.3.4. Paramètres du contrôleur frontal
7.3.5. Sous-classer le contrôleur frontal
7.4. L'objet Requête
7.4.1. Introduction
7.4.2. Les requêtes HTTP
7.4.2.1. Accéder aux données de la requête
7.4.2.2. Base de l'URL et sous-dossiers
7.4.2.3. Déterminer le type de la requête
7.4.2.4. Détecter les requêtes AJAX
7.4.3. Sous-classer l'objet Requête
7.5. Routeur Standard : Zend_Controller_Router_Rewrite
7.5.1. Introduction
7.5.2. Utilisation d'un routeur
7.5.3. Utilisation basique du routeur de réécriture
7.5.4. Routes par défaut
7.5.5. Base URL et sous dossiers
7.5.6. Types de route
7.5.6.1. Zend_Controller_Router_Route
7.5.6.1.1. Variables par défaut
7.5.6.1.2. Obligations et contraintes des variables
7.5.6.2. Zend_Controller_Router_Route_Static
7.5.6.3. Zend_Controller_Router_Route_Regex
7.5.7. Utiliser Zend_Config avec le RewriteRouter
7.5.8. Dérivation de l'objet Router
7.6. Le dispatcheur
7.6.1. Vue d'ensemble
7.6.2. Sous-classer le dispatcheur
7.7. Contrôleurs d'action
7.7.1. Introduction
7.7.2. Initialisation d'objet
7.7.3. Détournement Pre- et Post-Dispatch (Hook)
7.7.4. Accesseurs
7.7.5. Integration des Vues
7.7.5.1. Initialisation des Vues
7.7.5.2. Effectuer le rendu des Vues
7.7.6. Méthodes utiles
7.7.7. Sous-classer le contrôleur d'action
7.8. Aides d'action (Helper)
7.8.1. Introduction
7.8.2. Initialisation des aides
7.8.3. Le gestionaire d'aide (Broker)
7.8.4. Aides d'action intégrées
7.8.4.1. ActionStack
7.8.4.2. AutoComplete
7.8.4.2.1. AutoCompletion with Dojo
7.8.4.2.2. AutoCompletion with Scriptaculous
7.8.4.3. ContextSwitch and AjaxContext
7.8.4.3.1. Default Contexts Available
7.8.4.3.2. Creating Custom Contexts
7.8.4.3.3. Setting Contexts Per Action
7.8.4.3.4. Initializizing Context Switching
7.8.4.3.5. Additional Functionality
7.8.4.3.6. AjaxContext Functionality
7.8.4.4. FlashMessenger
7.8.4.4.1. Introduction
7.8.4.4.2. Exemple d'utilisation basique
7.8.4.5. JSON
7.8.4.6. Redirector
7.8.4.6.1. Introduction
7.8.4.6.2. Exemples d'utilisation basique
7.8.4.7. ViewRenderer
7.8.4.7.1. Introduction
7.8.4.7.2. API
7.8.4.7.3. Exemples
7.8.4.7.4. Utilisation avancée
7.8.5. Ecrire vos propres aides
7.9. Objet de réponse
7.9.1. Utilisation
7.9.2. Manipulation des en-têtes
7.9.3. Segments nommés
7.9.4. Manipulation des exceptions dans l'objet de réponse
7.9.5. Dériver l'objet de réponse
7.10. Plugins
7.10.1. Introduction
7.10.2. Ecrire des plugins
7.10.3. Utilisation des plugins
7.10.4. Récupération et manipulations des plugins
7.10.5. Plugins inclus dans Zend Framework
7.10.5.1. ActionStack
7.10.5.2. Zend_Controller_Plugin_ErrorHandler
7.10.5.2.1. Utilisation de ErrorHandler pour gérer les erreurs 404
7.10.5.2.2. Gestion des rendus précédants de la réponse
7.10.5.2.3. Exemples d'utilisation
7.10.5.2.4. Exemple de contrôleur d'erreurs
7.11. Utilisation de conventions de dossiers modulaires
7.11.1. Introduction
7.11.2. Specification des dossiers de modules
7.11.3. Routage des modules
7.11.4. Module or Global Default Controller
7.12. Exceptions avec MVC
7.12.1. Introduction
7.12.2. Comment gérer les exceptions?
7.12.3. Différents types d'exceptions que vous pouvez rencontrer
7.13. Migrer depuis des versions précédentes
7.13.1. Migrer de la version 1.0.x vers 1.5.0 ou plus récent
7.13.2. Migrer de la version 0.9.3 vers 1.0.0RC1 ou plus récent
7.13.3. Migrer de la version 0.9.2 vers 0.9.3 ou plus récent
7.13.4. Migrer de la version 0.6.0 vers 0.8.0 ou plus récent
7.13.5. Migrer de la version 0.2.0 ou plus ancien vers 0.6.0

7.1. Zend_Controller - Démarrage rapide

7.1.1. Introduction

Zend_Controller est le coeur du système MVC du Zend Framework. MVC équivaut à Modèle-Vue-Contrôleur et est un modèle 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 expédiées à différents contrôleurs d'action ("Action Controller") basés sur l'URL demandé.

Le système Zend_Controller a été contruit 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.

7.1.2. 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.

7.1.2.1. 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

7.1.2.2. 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.

7.1.2.3. Créer vos règles de réécriture

Editez le fichier html/.htaccess afin de lire ceci :


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

Les règles ci-dessus vont redirigées toute requête non-ressource (images, feuilles de style CSS) vers le contrôleur frontal. S'il y a d'autres extensions que vous souhaitez exclure du contrôleur frontal (PDFs, fichiers textes, etc.), ajoutez leurs extensions au commutateur, ou créez vos propres règles de réécriture.

[Note] 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.

7.1.2.4. Créér 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 :


<?php
require_once 'Zend/Controller/Front.php';
Zend_Controller_Front::run('/chemin/vers/application/controllers');

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

7.1.2.5. 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 le 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 dispatcher 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 :


<?php
/** Zend_Controller_Action */
require_once 'Zend/Controller/Action.php';

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

Par défaut, l'aide d'action ViewRenderer 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, 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.

7.1.2.6. 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>

7.1.2.7. Créer votre contrôleur d'erreur

Par défaut, le plugin de gestion des erreurs est 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 :


<?php
/** Zend_Controller_Action */
require_once 'Zend/Controller/Action.php';

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>

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