A free and open-source book on ZF3 for beginners

Translation into this language is not yet finished. You can help this project by translating the chapters and contributing your changes.

4.3. Les Controleurs

Un contrôleur permet de faire communiquer l'application, les modèles et les vues: il reçoit en entrée une requête HTTP et utilise le(s) modèle(s) et la vue correspondante pour produire une réponse HTTP.

Les contrôleurs appartiennent à un module. Ils sont situés généralement dans un sous-dossier Controller situé dans le dossier source du module (illustré à la figure 4.3).

Figure 4.3. Répertoire du contrôleur Figure 4.3. Répertoire du contrôleur

L'application Zend Skeleton vous fournit par défaut une classe IndexController. L'IndexController est généralement le contrôleur principal de votre site web. Son code est présenté ci-dessous (certaines parties du code ont été omises pour plus de simplicité) :

<?php
namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class IndexController extends AbstractActionController
{
    public function indexAction()
    {
        return new ViewModel();
    }
}

Dans l'exemple ci-dessus, vous pouvez voir que les contrôleurs sont définit dans un Namespace dédié (ligne 2). Le contrôleur Index, comme tous les autres contrôleurs du module Application, est situé dans le namespace Application\Controller.

Un contrôleur est une classe généralement dérivée de la classe de base AbstractActionController (ligne 7).

Par défaut, votre contrôleur contient une méthode d'action appelée indexAction() (voir les lignes 9-12). En général, vous allez ajouter d'autres méthodes d'action dans votre controleur qui corresponderont à d'autres pages du site.

ZF3 reconnaît automatiquement les méthodes d'action par le suffixe Action. Si le nom d'une méthode de contrôleur n'a pas ce suffixe, elle est considérés comme une méthode simple et non comme une action.

Comme son nom l'indique, une méthode d'action effectue une action sur le site, ce qui entraîne généralement la production d'une seule page web. Le contrôleur index pourrait contenir plusieurs méthodes d'action correspondantes à différentes pages d'un site (tableau 4.1). Par exemple, vous auriez une action "index" pour la page Accueil, "about" pour la page À propos, "contactUs" pour la page Contactez-nous et éventuellement d'autres actions pour les autres pages.

Table 4.1. Actions typiques du contrôleur index
Methode Action Description
IndexController::indexAction() L'action "index" affiche la page d'accueil de votre site.
IndexController::aboutAction() L'action "about" affiche la page A Propos du site. La page À propos contient des informations de contact et de copyright..
IndexController::contactUsAction() L'action "contactUs" affiche la page Contactez-nous du site. Elle affiche pour formulaire pour contacter les auteurs du site.

4.3.1. Classe de base des contrôleurs

Chaque contrôleur de votre site hérite de la classe de base AbstractActionController. Dans la figure 4.4, le diagramme d'héritage de classe est présenté.

Figure 4.4. Schéma d'héritage du contrôleur Figure 4.4. Schéma d'héritage du contrôleur

La classe AbstractActionController vous fournit plusieurs méthodes utiles que vous pouvez utiliser dans vos contrôleurs. Le tableau 4.2 fournit un bref résumé de ces méthodes :

Table 4.2. Méthodes utiles de AbstractActionController
Nom de la méthode Description
getRequest() Récupère l'objet Zend\Http\Request, un objet qui représente les données de la requête HTTP.
getResponse() Récupère l'objet Zend\Http\PhpEnvironment\Response permettant de définir les données de la réponse HTTP.
getEventManager() Renvoie l'objet Zend\EventManager\EventManager, permettant de déclencher et d'écouter des événements.
getEvent() Renvoie l'objet Zend\Mvc\MvcEvent, qui représente l'événement auquel le contrôleur répond.
getPluginManager() Renvoie l'objet Zend\Mvc\Controller\PluginManager, qui peut être utilisé pour déclarer des plugins de contrôleur.
plugin($name, $options) Cette méthode permet d'accéder à un plugin de contrôleur donnée via son nom.
__call($method, $params) Permet d'appeler un plugin indirectement en utilisant la méthode magique PHP __call.

Comme vous pouvez le voir dans le tableau ci-dessus, la classe de contrôleur de base vous permet d'accéder aux données de requête et de réponse HTTP et vous fournit un accès au gestionnaire d'événements. Il vous donne également la possibilité de déclarer et d'appeler des plugins de contrôleurs (nous verrons plus loin dans ce chapitre ce qu'est un plugin de contrôleur).


Top