International PHP Conference Berlin 2025

La classe Yaf_Router

(Yaf >=1.0.0)

Introduction

Yaf_Router est le framework standard pour le routage. Le routage est le fait de prendre la partie finale d'une URI (la partie de l'URI qui vient après l'URI de base : voir la méthode Yaf_Request_Abstract::setBaseUri()), et la décompose en paramètres pour déterminer quel module, contrôleur, et action de ce contrôleur doivent recevoir la requête. Cette valeur de module, de contrôleur, d'action et d'autres paramètres sont empaquetés dans un objet Yaf_Request_Abstract qui sera ensuite analysé par Yaf_Dispatcher. Le routage intervient uniquement lorsqu'une requête est initialement reçue et avant l'envoi au premier contrôleur. Yaf_Router est prévu pour autoriser les fonctionnalités similaires au mod_rewrite en utilisant des structures PHP. Ces structures sont basés sur le routage en Ruby on Rails et ne nécessitent aucun connaissance en ré-écriture d'URL de serveur web. Elles sont prévues pour fonctionner avec une seule règle Apache mod_rewrite (une parmi) :

Exemple #1 Règle de ré-écriture pour Apache

RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css|html)$ index.php
ou (préféré) :

Exemple #2 Règle de ré-écriture pour Apache

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Si vous utilisez Lighttpd, la règle suivante est valide :

Exemple #3 Règle de ré-écriture pour Lighttpd

url.rewrite-once = (
  ".*\?(.*)$" => "/index.php?$1",
  ".*\.(js|ico|gif|jpg|png|css|html)$" => "$0",
  "" => "/index.php"
)
Si vous utilisez Nginx, la règle suivante est valide :

Exemple #4 Règle de ré-écriture pour Nginx

server {
  listen ****;
  server_name  yourdomain.com;
  root   document_root;
  index  index.php index.html;

  if (!-e $request_filename) {
    rewrite ^/(.*)  /index.php/$1 last;
  }
}

Routage par défaut

Yaf_Router est fourni préconfiguré avec un routage par défaut Yaf_Route_Static, qui décompose les URIs en forme de contrôleur/action. De plus, un nom de module peut être spécifié comme premier élément du chemin, autorisant ainsi les URIs sous la forme module/contrôleur/action. Et finalement, les paramètres ajoutés à l'URI seront détectés aussi par défaut - contrôleur/action/var1/value1/var2/value2.

Note:

Le nom du module doit être défini dans la configuration, par exemple application.module="Index,Foo,Bar" dans ce cas, uniquement index, foo et bar peuvent être considérés comme nom de module ; si la configuration n'existe pas, seul le module nommé "Index" sera utilisable.

Voici quelques exemples sur la façon dont ces routages sont détectés :

Exemple #5 Exemple avec Yaf_Route_Static (route par défaut)

// Supposons la configuration suivante :
$conf = array(
   "application" => array(
      "modules" => "Index,Blog",
   ),
);
     
Que le contrôleur :
http://example/news
    controller == news
Qu'une action (lorsqu'on définit yaf.action_prefer=1 en php.ini)
    action  == news

Module invalide lié à un nom de contrôleur :
http://example/foo
    controller == foo

Module + contrôleur :
http://example/blog/archive
    module     == blog
    controller == archive
     
Module + contrôleur + action :
http://example/blog/archive/list
    module     == blog
    controller == archive
    action     == list
     
Module + contrôleur + action + paramètres :
http://example/blog/archive/list/sort/alpha/date/desc
    module     == blog
    controller == archive
    action     == list
    sort       == alpha
    date       == desc

Synopsis de la classe

class Yaf_Router {
/* Propriétés */
protected $_routes;
protected $_current;
/* Méthodes */
public __construct()
public addRoute(string $name, Yaf_Route_Abstract $route): bool
public getRoutes(): mixed
public route(Yaf_Request_Abstract $request): bool
}

Propriétés

_routes

Pile des routes enregistrées.

_current

Après la phase de routage, ceci indique le nom de la route utilisé pour router la demande courante. Vous pouvez récupérer ce nom en utilisant la méthode Yaf_Router::getCurrentRoute().

Sommaire

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top