(Yaf >=1.0.0)
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
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]
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" )
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;
}
}
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
la pile des routes enregistrées
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().