(Yaf >=1.0.0)
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
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 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
Pile des routes enregistrées.
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().