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).
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.
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. |
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é.
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 :
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).