# 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 parmis) :

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

Yaf_Router {
/* Propriétés */
protected $_routes ;
protected $_current ;
/* Méthodes */
public addConfig ( Yaf_Config_Abstract `$config` ) : bool
public addRoute ( string `$name` , Yaf_Route_Abstract `$route` ) : bool
public __construct ( void )
public getCurrentRoute ( void ) : string
public getRoute ( string `$name` ) : Yaf_Route_Interface
public getRoutes ( void ) : 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

- Yaf_Router::addConfig — Ajoute une route définie dans la configuration d'un routeur
- Yaf_Router::addRoute — Ajoute une nouvelle route dans un routeur
- Yaf_Router::__construct — Constructeur de la classe Yaf_Router
- Yaf_Router::getCurrentRoute — Récupère le nom effectif de la route
- Yaf_Router::getRoute — Récupère une route via son nom
- Yaf_Router::getRoutes — Récupère les routes enregistrées
- Yaf_Router::route — Le but de route