PHP 8.6.0 Beta 3 is available for testing

La classe Yaf_Router

(Yaf >=1.0.0)

Introduction

Yaf_Router est le routeur standard du framework. Le routage est le processus qui consiste à prendre le point d'entrée d'une URI (la partie de l'URI qui vient après l'URI de base : voir Yaf_Request_Abstract::setBaseUri()) et à la décomposer en paramètres afin de déterminer quel module, quel contrôleur et quelle action de ce contrôleur devraient recevoir la requête. Ces valeurs de module, de contrôleur, d'action et les autres paramètres sont regroupés dans un objet Yaf_Request_Abstract qui est ensuite traité par Yaf_Dispatcher. Le routage n'a lieu qu'une seule fois : lorsque la requête est initialement reçue et avant que le premier contrôleur ne soit distribué. Yaf_Router est conçu pour permettre des fonctionnalités semblables à mod_rewrite en utilisant uniquement des structures PHP. Il s'inspire très librement du routage de Ruby on Rails et ne nécessite aucune connaissance préalable de la réécriture d'URL par le serveur web. Il est conçu pour fonctionner avec une unique règle mod_rewrite d'Apache (l'une de celles-ci) :

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

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

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]
Avec Lighttpd, la règle de réécriture 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"
)
Avec Nginx, il faut utiliser la règle de réécriture suivante :

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;
  }
}

Route par défaut

Yaf_Router est préconfiguré avec une route par défaut, Yaf_Route_Static, qui fait correspondre les URI de la forme controller/action. De plus, un nom de module peut être indiqué comme premier élément du chemin, autorisant les URI de la forme module/controller/action. Enfin, elle fait aussi correspondre par défaut tous les paramètres supplémentaires ajoutés à l'URI - controller/action/var1/value1/var2/value2.

Note:

Le nom du module doit être défini dans la configuration ; en considérant application.module="Index,Foo,Bar", dans ce cas, seuls index, foo et bar peuvent être considérés comme un nom de module. S'il n'est pas configuré, il n'y a qu'un seul module, nommé "Index".

Quelques exemples illustrant la façon dont ces routes sont mises en correspondance :

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

// En supposant la configuration suivante :
$conf = array(
   "application" => array(
      "modules" => "Index,Blog",
   ),
);

Contrôleur seul :
http://example/news
    controller == news
Action seule (lorsque yaf.action_prefer=1 est défini dans php.ini)
    action  == news

Un module invalide correspond à 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 function __construct()
public function addConfig(Yaf_Config_Abstract $config): bool
public function addRoute(string $name, Yaf_Route_Abstract $route): bool
public function getCurrentRoute(): string
public function getRoute(string $name): Yaf_Route_Interface
public function getRoutes(): mixed
public function route(Yaf_Request_Abstract $request): ?bool
}

Propriétés

_routes

la pile des routes enregistrées

_current

après la phase de routage, cette propriété indique le nom de la route qui a été utilisée pour router la requête courante. Il est possible d'obtenir ce nom via Yaf_Router::getCurrentRoute().

Sommaire

add a note

User Contributed Notes

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