Le routing

Le système de routing de Stato vous offre la possibilité de faire de l'URL rewriting en PHP, c'est à dire de faire correspondre une requête entrante à un contrôleur et une action. Les routes sont définies dans le fichier conf/routes.php. A l'ouverture de ce fichier, vous trouverez le code suivant :

$map = new SRouteSet();
$map->connect(':controller/:action/:id');
 
return $map;

Cette route par défaut spécifie qu'une requête est constituée d'un :controller suivi d'une :action à laquelle on fournit un :id.

Si par exemple la requête est posts/edit/12, elle correspond aux paramètres suivants :

$params = array(
    'controller' => 'posts',
    'action'     => 'edit',
    'id'         => '12'
);

Notez bien que toutes les routes n'ont pas la même priorité : cette priorité est définie par leur ordre d'apparition, du haut vers le bas (la plus haute est donc prioritaire sur toutes les autres).

En pratique donc, vous avez tout intérêt à laisser en dernière position la route par défaut :

$map = new SRouteSet();
 
$map->connect('', array('controller' => 'posts', 'action' => 'list'));
$map->connect(':controller/:action/:id');
 
return $map;

Paramètres par défaut

Le deuxième argument de la méthode connect vous permet de définir des paramètres par défaut. Il est donc très facile de définir un contrôleur par défaut pour votre application :

$map = new SRouteSet();
 
$map->connect(':controller/:action/:id', array('controller' => 'posts'));
 
return $map;

Notez que si vous ne précisez pas d'action par défaut, index sera utilisé.

Routes nommées

Vous pouvez remplacer la méthode connect par le nom que vous souhaitez donner à votre route. Par exemple :

$map = new SRouteSet();
 
$map->home('', array('controller' => 'posts', 'action' => 'list'));
$map->connect(':controller/:action/:id');
 
return $map;

Vous disposerez ainsi dans vos contrôleurs et vues d'une fonction home_url() référençant votre route :

$this->redirect_to(home_url());

Des arguments peuvent être passés à ces fonctions :

$this->redirect_to(show_post_url(array('id' => 12)));

Vous pouvez aussi leur passer une instance d'une classe métier, pour que l'id de cette instance soit utilisée comme paramètre :

link_to($this->post->title, show_post_url($this->post));
// ce qui équivaut à :
link_to($this->post->title, show_post_url(array('id' => $this->post->id)));

Paramètres et expressions régulières

Vous pouvez utiliser une expression régulière pour préciser le format attendu pour un paramètre :

$map->connect('posts/:year/:month/:day', array(
    'controller'   => 'posts',
    'action'       => 'show_by_date',
    'requirements' => array(
        'year'  => '/\d{4}/',
        'month' => '/\d{1,2}/',
        'day'   => '/\d{1,2}/'
)));

Cette route, vous l'aurez compris, permet de répondre à des requêtes du type posts/2007/01/20. Sans l'option requirements, notre route serait trop générale et elle répondrait également à des requêtes du type posts/edit/12.

Nous pouvons d'ailleurs l'améliorer de façon à ce qu'elle réponde également à des requêtes du type posts/2007 ou posts/2007/01 :

$map->connect('posts/:year/:month/:day', array(
    'controller'   => 'home',
    'action'       => 'show_by_date',
    'month'        => null,
    'day'          => null,
    'requirements' => array(
        'year'  => '/\d{4}/',
        'month' => '/\d{1,2}/',
        'day'   => '/\d{1,2}/'
)));
 
0_8/fr/routing.txt · Last modified: 2009/04/03 02:27 (external edit)
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki