====== 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}/' )));