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.

5.9. Extraire les paramètres d'une route

Lors de la correspondance de route, le routeur (classe route de niveau supérieur) renvoie certains paramètres : les «valeurs par défaut» (paramètres répertoriés dans la section defaults de la configuration du routage) ainsi que tous les paramètres génériques extraits de la chaîne d'URL.

Dans votre contrôleur, vous devrez souvent récupérer ces paramètres. Nous l'avons déjà fait dans les exemples ci-dessus. Dans cette section, nous allons faire un résumé.

Pour récupérer un paramètre de la route dans la méthode d'action de votre contrôleur, vous utilisez le plugin Params et sa méthode fromRoute() qui prend deux arguments : le nom du paramètre à récupérer et la valeur à renvoyer si le paramètre n'est pas présent.

La méthode fromRoute() peut également être utilisée pour récupérer tous les paramètres en même temps en tant que tableau. Pour ce faire, appelez fromRoute() sans arguments, comme indiqué dans l'exemple ci-dessous :

// Un exemple d'action.
public function someAction() 
{
    // On récupère seulement le paramètre 'id' de la route.
    $id = $this->params()->fromRoute('id', -1);
  
    // On récupère tous les paramètres de route en même temps en tant que tableau.
    $params = $this->params()->fromRoute();
  
    //...
}

5.9.1. Récupération de RouteMatch et de l'objet Router

Lors de la correspondance d'une route, la classe de routage crée en interne une instance de la classe Zend\Router\RouteMatch, fournissant les méthodes d'extraction du nom de la route correspondant et des paramètres extraits de cette route. Les méthodes utiles de la classe RouteMatch sont listées dans le tableau 5.3 :

Table 5.3. Les méthodes de la classe Zend\Router\RouteMatch
Nom de la méthode Description
getMatchedRouteName() Récupère le nom de la route correspondante.
getParams() Récupère tous les paramètres.
getParam($name, $default) Récupère un paramètre spécifique.

Dans la plupart des cas, il suffira d'utiliser le plugin Params mais vous pouvez également utiliser l'objet RouteMatch pour accomplir la même tâche.

Pour obtenir l'objet RouteMatch de la méthode d'action de votre contrôleur, vous pouvez utiliser le code suivant :

// Un exemple d'action.
public function someAction() 
{
    //On récupère l'objet RouteMatch.
    $routeMatch = $this->getEvent()->getRouteMatch();
  
    // On récupère le nom de la route correspondant.
    $routeName = $routeMatch->getMatchedRouteName();
  
    // On récupère tous les paramètres de route en même temps sous forme tableau.
    $params = $routeMatch->getParams();
  
    //...	
}

Dans la ligne 5 du code ci-dessus, nous utilisons la méthode getEvent() de la classe de base AbstractActionController pour récupérer l'objet MvcEvent qui représente l'événement (dans ZF3, le cycle de vie de l'application est constitué d'événements). Nous utilisons ensuite la méthode getRouteMatch() de la classe MvcEvent pour récupérer l'objet RouteMatch.

À la ligne 8, nous utilisons la méthode getMatchedRouteName() pour récupérer le nom de la route correspondant à la requête HTTP, et à la ligne 11, nous récupérons tous les paramètres de la route.

La classe MvcEvent peut également être utilisée pour récupérer le routeur (la classe route de niveau supérieur). Vous pouvez le faire avec la méthode getRouter() de la classe MvcEvent, comme ci-dessous :

    // Appelé à l'intérieur de votre méthode d'action
    // pour récupérer le RouteStackInterface pour la classe de routage.
    $router = $this->getEvent()->getRouter();

Dans le code ci-dessus, nous utilisons la méthode getRouter() qui renvoie l'interface RouteStackInterface. Cette interface est l'interface de base pour SimpleRouteStack et TreeRouteStack. Elle fournit les méthodes pour travailler avec les routes contenues dans la pile de route.


Top