Documentation

Routage

Routage de base

Le routage de base de Temma est volontairement très simple.

Par défaut, les URLs sont mappées sur les noms des contrôleurs.

Lors d'une connexion à www.site.com/article/show/123/title
Temma exécute le code Article::show(123, 'title')
et utilise le template article/show.tpl

Les routes permettent de définir des «contrôleurs virtuels», servant d'alias aux contrôleurs réels. C'est particulièrement utile pour permettre l'accès à des contrôleurs sous des noms de fichiers (tels que les classiques robots.txt et sitemap.xml).

Cela permet aussi d'avoir un même contrôleur qui répond sur plusieurs URL différentes, en faisant éventuellement des traitements différents en fonction du nom de contrôleur demandé.

Exemple :

{
    "routes": {
        "article": "Posts",
        "sitemap.xml": "\\App\\Controllers\\Sitemap",
        "sitemap.extended.xml": "\\App\\Controllers\\ExtendedSitemap"
    }
}
  • Ligne 2 : Définition des routes.
  • Ligne 3 : Définition du contrôleur virtuel article, qui est un alias du contrôleur Posts.
    Par exemple, un appel à l'URL http://www.site.com/article/list appelera la méthode list() de l'objet Posts.
  • Ligne 4 : On fait en sorte qu'un appel à l'URL http://www.site.com/sitemap.xml entraîne l'exécution de la méthode index() du contrôleur \App\Controllers\Sitemap.
  • Ligne 5 : On fait en sorte qu'un appel à l'URL http://www.site.com/sitemap.extended.xml entraîne l'exécution de la méthode index() du contrôleur \App\Controllers\ExtendedSitemap.

Routage avancé

Le plugin \Temma\Plugins\Router permet d'activer un routage plus élaboré.

Il doit être activé dans le fichier temma.json comme un pré-plugin, et il utilise une configuration étendue pour définir les contrôleurs/actions à exécuter en fonction de l'URL appelée :

{
 "plugins": {
     "_pre": [
         "\\Temma\\Plugins\\Router"
     ]
 },
 "x-router": {
     "GET:/articles":
         "\\MyApp\\Ctrl\\Cms::list()",
     "GET:/articles/[sort:enum:alpha,date,mark]":
         "\\MyApp\\Ctrl\\Cms::list($sort)",
     "*:/article/[id:int]/[title:string]":
         "\\MyApp\\Ctrl\\Cms::show($id, $title)"
 }
}
  • Ligne 4 : L'objet \Temma\Plugins\Router est défini comme pré-plugin. Il prendra ainsi la main et pourra modifier les plugins, le contrôleur et l'action qui seront exécutés par le framework.
  • Ligne 7 : Configuration étendue spécifique au routeur avancé.
  • Lignes 8 et 9 : On définit que pour l'URL /articles appelée en GET, il faut exécuter la méthode list() de l'objet \MyApp\Ctrl\Cms.
  • Lignes 10 et 11 : On définit qu'un appel en GET de l'URL /articles/ peut être suivie d'un paramètre (qu'on nommera sort) qui ne peut contenir que les valeurs alpha, date ou mark. Dans ce cas, il faudra exécuter la méthode list() de l'objet \MyApp\Ctrl\Cms, en lui fournissant en paramètre la valeur sort.
  • Lignes 12 et 13 : On définit que pour l'URL /article/, suivie d'un paramètre de type entier (qu'on nommera id) et d'un paramètre de type texte (nommé title), il faut exécuter la méthode show() de l'objet \MyApp\Ctrl\Cms, en lui fournissant en paramètre les valeurs id et title récupérés depuis l'URL. C'est route fonctionne quelle que soit la méthode utilisée (GET, POST, PUT …).

En plus de définir l'action à exécuter pour chaque route, il est aussi possible de définir les pré-plugins et post-plugins à appeler.

{
 "x-router": {
     "GET:/articles":
         "\\MyApp\\Ctrl\\Cms::list()",
     "GET:/articles/[sort:enum:alpha,date,mark]":
         "\\MyApp\\Ctrl\\Cms::list($sort)",
     "*:/article/[id:int]/[title:string]":
         "\\MyApp\\Ctrl\\Cms::show($id, $title)",
     "POST:/article": {
         "_pre":   "\\MyApp\\Plugins\\Auth",
         "action": "\\MyApp\\Ctrl\\Cms::create()",
         "_post":  [
             "\\MyApp\\Plugins\\LogFlow",
             "\\MyApp\\Plugins\\EmailToAdmin"
         ],
     },
     "PUT:/article/[id:int]": {
         "_pre":   [
             "\\MyApp\\Plugins\\Auth",
             "\\MyApp\\Plugins\\DataCheck"
         ],
         "action": "\\MyApp\\Ctrl\\Cms::update($id)",
         "_post":  "\\MyApp\\Plugins\\LogFlow"
     },
 }
}
  • Ligne 9 : On définit une route pour l'URL /article appelée en POST.
    • Ligne 10 : On demande à ce qu'un pré-plugin soit exécuté pour cette route.
    • Ligne 11 : On spécifie le contrôleur et l'action associés à cette route.
    • Ligne 12 à 15 : On configure deux post-plugins à exécuter pour cette route. Dans le cas où il y a plusieurs plugins, il faut créer une liste.
  • Ligne 17 : On définit une route pour l'URL /article/, suivie d'un paramètre de type entier (qu'on nommera id), appelée avec la méthode PUT.
    • Ligne 18 à 21 : Il y a deux pré-plugins pour cette route.
    • Ligne 22 : On spécifie le contrôleur et l'action associés à cette route.
    • Ligne 23 : Il y a un post-plugin pour cette route.
Précédent : Configuration
Suivant : Log

Table des matières