Documentation
Routage
Table des matières ▼
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 __invoke() 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 __invoke() 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.
Les objets à appeler comme contrôleurs doivent obligatoirement commencer avec un caractère backslash
(\), même s'ils sont placés dans le namespace global.
Si une URL n'est pas définie dans la configuration du plugin, Temma utilisera les valeurs définies
dans la configuration générale (notamment les directives rootController et defaultController).
La directive proxyController est toujours prioritaire.
{
"plugins": {
"_pre": [
"\\Temma\\Plugins\\Router"
]
},
"x-router": {
"GET:/articles":
"\\MyApp\\Ctrl\\Cms::list()",
"GET:/articles/[sort:enum:alpha,date]":
"\\MyApp\\Ctrl\\Cms::list($sort)",
"GET:/articles/[sort:enum:alpha,date]/[page:int]":
"\\MyApp\\Ctrl\\Cms:list($sort, $page, '#f00')",
"*:/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 ou date. 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 : Un appel en GET de l'URL /articles/ peut aussi recevoir deux paramètres. Le premier est un type de tri (comme vu juste au-dessus), le second est un numéro de page. La méthode list() est alors appelée, avec le type de tri en premier paramètre, le numéro de page en second paramètre, et une chaîne de caractères fixe en troisième paramètre.
- Lignes 14 et 15 : 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 : | Bibliothèques externes |
Suivant : | Log |
Table des matières
- Migration : Comment passer de Temma 1.x à la version 2
- Installation : Télécharger Temma et l'installer pour démarrer votre projet Web
- Configuration : Toutes les directives de configuration du fichier etc/temma.json et les variables d'environnement utilisables en option
- Bibliothèques externes : Comment utiliser des bibliothèques de fonctions externes
- Routage : Le système de routage par défaut de Temma, et le routage avancé
- Log : Utilisation du système de log, gestion par niveaux de criticité
- Contrôleurs : Pièces essentiels de votre application Web
- Vues : Templates Smarty ou exports JSON/CSV/RSS/iCal/INI
- Injection de dépendances : La colonne vertébrale de vos développements applicatifs
- Sessions : Extension des sessions utilisateurs gérées par PHP
- Sources de données : Pour gérer l'accès aux données de manière unifiée
- Modèle : Comment utiliser les DAO pour accéder aux bases de données
- Flux d'exécution : Comment gérer le flux d'exécution, entre les plugins et le contrôleur
- Plugins : Comment utiliser les plugins, et écrire les vôtres pour modulariser votre code
- Attributs : Comment filtrer l'accès aux contrôleurs et aux actions
- Interface en ligne de commande : Pour créer des scripts exécutables en ligne de commande, initialisés automatiquement par Temma
- Helpers : Objets proposés par Temma pour vous aider dans plusieurs circonstances