Skip to main content

Routes

Comme expliqué auparavant, Castopod s'appuie sur un modèle MVC qui permet d'accéder à des pages du site grâce à des controlleurs qui vont chargés des vues. Si vous n'avez pas compris un seul mot, nous vous renvoyons vers l'article qui correspond à l'explication de ce principe.

Le projet est divisé en deux dossiers principaux, le dossier App et le dossier Modules, le premier étant plutôt destiné aux pages qui vont être accessible à n'importe qui, tandis que le deuxième est destiné à une utilisation particulière comme de l'administration ou de l'authentification. Là aussi, si vous n'avez pas tout compris, nous vous redirigeons vers l'article correspondant à l'organisation du projet.

Définition d'une route

Pour développer sur la manière dont les routes sont agencées dans le projet, nous allons nous intéresser dans un premier à la structure d'une route. Prenons par exemple la route vers la page d'accueil (accessible à l'emplacement app/Config/Routes.php) :

$routes->get('/', 'HomeController', [
  'as' => 'home',
]);

Cette configuration indique quatres éléments :

  • La route est accessible via le protocole GET (et non POST ou un autre)
  • Elle concerne l'index '/', c'est-à-dire la racine du projet, lorsque l'on tape juste l'URL de l'hébergement (par défaut localhost:8080)
  • Elle fait appelle au controlleur HomeController, avec la fonction particulière (il n'y a pas de fonction d'indiquée)
  • Le nom de cette route est home. On pourra donc utiliser ce nom si on souhaite configurer une redirection dans une autre route ou un contrôleur.

La gestion de l'affichage est ensuite gérée par le controlleur associé à la route, ici HomeControlleur, qui en fonction de la fonction appelée par la route pourra aller chercher la vue recherchée.

Si maintenant on souhaite avoir une route sur l'URL avec comme chemin /health, qui permettra de savoir si Castopod rencontre un problème ou non.
La structure sera assez similaire, il faudra juste changer l'URL correspondant à la route, et indiquer une fonction particulière du contrôleur :

$routes->get('/health', 'HomeController::health', [
    'as' => 'health',
]);

Avec cette route, lorsque l'utilisateur accèdera à la page URL/health, cela chargera la fonction health() du contrôleur HomeController.

Enfin, il est possible d'indiquer un paramètre à donner au contrôleur lors de la connexion, en utilisant le caractère $.
On peut appliquer des filtres à ce paramètre en indiquant son type, et en définissant ce type au début du fichier route.

Imaginons que la fonction health(int iD) du controleur nécessite un paramètre numérique de taille maximale égale à 20. Nous pourrons donc commencer par créer un filtre nombre, et appliquer ce filtre au paramètre indiqué par la route :

$routes->addPlaceholder('nombre', '[0-9]{1,20}');

Nous avons ici créer un filtre nombre, qui indique que chaque caractère doit être compris entre 0 et 9, et la chaîne de caractère ne peut pas être plus grand que 20.

Pour créer la route, il suffira donc d'indiquer le paramètre lors de la déclaration :

$routes->get('health/(:nombre)', 'HomeController::health/$1');

Définition d'un groupe

Avec un ensemble de routes, il est possible de les regrouper sous un groupe. Cela peut être pratique si ces routes possèdent un attribut commun,