Le routeur
Le .htaccess est la base du routeur de notre framework. Il va router toutes les demandes vers le bootstrap (fichier de lancement) index.php du framework. Cependant, si un des fichiers demandés existent (comme une image par exemple), il retournera le contenu du fichier. Nous vous recommandons d’ailleurs de ne pas créer un autre fichier dynamique (type PHP) et de toujours travailler au sein du framework.RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^.*$ /index.php [NC,L]Le bootstrap lance le routeur du framework qui s’occupera d’appeler les méthodes nécessaires pour le bon fonctionnement de votre application.
Le routeur ne fait que respecter ce que vous lui définissez dans les fichiers de configuration. De base, le framework vous propose une configuration pour notre projet Demo :
{ "localhost" : { "routes": { "home": { "route": "/", "controller" : "\\Venus\\src\\Demo\\Controller\\Home", "action": "show" } } } }Les fichiers de configurations sont des fichiers Json. Vous pouvez d’ailleurs les faire valider sur ce site lors de vos modifications car l’erreur est très rapide : http://jsonlint.com/
« Localhost » est le domaine de votre application (ou la base). Vous pouvez également faire « localhost/demo ».
Dans notre fichier, nous définissons ensuite nos routes.
« home » est un simple alias qui sera cependant important car il permettra de créer des liens dynamiquement sur vos applications.
« route » permet de définir l’URL a appeler pour lancer une action. Nous verrons plus tard, qu’il est possible de créer des URL dynamique.
« controller » permet de définir la classe qui contiendra l’action à enclencher (le nommage respecte les namespace du framework. Même si cette méthode est assez ouverte, il est recommandé de suivre les normes de nommage comme vous le voyez dans l’exemple.
« action » permet de définir l’action (en gros la méthode de la classe) à déclencher.
Vous pouvez aller voir le fichier /Venus/bundles/src/Demo/app/Controller/Home.php et la méthode show() pour voir comment le framework affiche un simple Hello World.
Routes avec des paramètres
Les routes peuvent être plus dynamiques et prendre en compte par exemple des paramètres :{ "localhost" : { "routes": { "home": { "route": "/[:id]", "controller" : "\\Venus\\src\\Demo\\Controller\\Home", "action": "show", "constraints": { "id": "[0-9]*" } } } } }On a rajouté ici un paramètre id dans la « route » que l’on définit plus précisément dans les « constraints » sous forme d’expression régulière. Il faudra également rajouter $id dans la méthode show(). Les paramètres sont également automatiquement rajoutés dans le $_GET.
Pour gérer une configuration alternative (pour un environnement de développement par exemple), vous pouvez créer un fichier Route.conf-local qui d’ailleurs est prioritaire sur le fichier Route.conf.
Il est possible de définir des GET par défaut car cela peut s’avérer très utile. Voici un exemple :
{ "localhost" : { "routes": { "home": { "route": "/[:id]", "controller" : "\\Venus\\src\\Demo\\Controller\\Home", "action": "show", "defaults_constraints": { "id": 1 }, "constraints": { "id": "[0-9]*" } } } } }
Routes complexes
Venus Framework est un framework MVC donc il propose un système de templating complexe. Cependant pour des pages statiques, il permet de diriger une route directement vers un template pour omettre les phases MC.Voici comment écrire par exemple sa route :
"template": { "route": "/template/", "template": "Demo", "layout": false, "content_type": "html" }Nous allons créer également un fichier e:\venus\bundles\src\Demo\app\View\Demo.tpl avec du texte quelconque dedans. Le « template » comprend automatiquement le lieu où chercher le template ainsi que l’extension .tpl de celui-ci.
Le « layout » permet d’automatiser la présence d’un layout. Pour ajouter ce Layout, il suffit de créer un fichier e:\venus\bundles\src\Demo\app\View\Layout.tpl et d’ajouter cela à l’intérieur pour appeler le modèle définit : {include file=$model}
Vous pouvez ainsi tester de mettre true à « layout ».
Dans une route il est possible également de préciser la méthode http utilisée : GET, POST, HEAD, PUT, DELETE, TRACE, CONNECT pour créer des services full-rest par exemple.
"test": { "route": "/template/", "template": "MenuManager", "layout": true, "content_type": "html", "methods": "GET" }Vous pouvez également mettre du cache sur la page qui permettra d’indiquer le temps de vie de celle-ci.
"test": { "route": "/template/", "template": "MenuManager", "layout": true, "content_type": "html", "cache_max_age": 100 }Pour mettre en place des pages en https, vous pouvez également indiquer que la page sera en HTTPS :
"test": { "route": "/template/", "template": "MenuManager", "layout": true, "content_type": "html", "schemes": "https" }
Créer des pages d'erreur
Il est bien pratique de pouvoir créer des pages d’erreurs personnalisées pour les applications de type web. Venus Framework propose de mettre en place ce type de page très rapidement.Dans le package de base, vous avez déjà un exemple en place (/bundles/conf/Route.conf) où l’on ajoute une route puis le template. Voici la route à créer :
"routes": { "404": { "template": "Error", "vars":{ "error_message": "Not Found", "error_code": "404" }, "content_type": "html", "cache": { "max_age": 100 }, "methods": "GET" } }Les routes 404 et 403 sont automatiquement reconnues comme les routes de pages d’erreur. Les vars permettent de passer automatiquement des variables au template appelé dans la conf (cela permet d’appeler le même template avec des variables différentes).
Il vous suffira de modifier /bundles/src/Demo/app/conf/Route.conf et /bundles/src/Demo/app/View/Error.tpl pour personnaliser vos pages d’erreurs.
[suivant]