Votre tableau $pages marche, mais Madame Lou voit déjà plus loin : /articles/la-fete-de-la-citrouille, /articles/le-chat-du-maire-a-disparu… Une ligne par article, à la main, ce serait sans fin. Le routeur installé tout à l'heure, FastRoute, sait reconnaître des familles d'adresses. Pour l'instant, il va simplement remplacer votre tableau, sans rien changer à ce qu'affiche la une.
Votre mission
- Créez le routeur avec
FastRoute\simpleDispatcher(). La fonction que vous lui passez reçoit unRouteCollector(déjà importé en haut du fichier : c'est l'API de FastRoute 1.3, la version installée). Elle y déclare la routeGET /, avec la fonction de la une comme gestionnaire. - Demandez au routeur quelle route correspond à la requête : sa méthode (
$_SERVER['REQUEST_METHOD']) et son chemin (Url::cheminDemande()). - Si une route est trouvée, affichez ce que renvoie son gestionnaire. Le tableau
$pageset leisset()disparaissent.
De votre tableau au routeur
Chaque ligne de votre routeur fait main a son équivalent. Avant :
$pages = ['/' => $une]; $chemin = Url::cheminDemande(); if (isset($pages[$chemin])) { echo $pages[$chemin](); }
Après :
$routeur = FastRoute\simpleDispatcher(function (RouteCollector $routes) { $routes->get('/', function (): string { // … le corps de $une, sans rien changer … }); }); $route = $routeur->dispatch($_SERVER['REQUEST_METHOD'], Url::cheminDemande()); if ($route[0] === Dispatcher::FOUND) { $gestionnaire = $route[1]; echo $gestionnaire($route[2]); }
FastRoute\simpleDispatcher() est une fonction rangée dans l'espace de noms FastRoute : on l'appelle par son nom complet, sans use.
dispatch() renvoie un tableau : en [0], le résultat (Dispatcher::FOUND si une route correspond), en [1] le gestionnaire, en [2] les morceaux variables de l'adresse, vides pour la une. Le routeur tient aussi compte de la méthode : GET pour lire une page, POST pour envoyer un formulaire.
Rappel
Dispatcher::FOUND est une constante de classe : une valeur fixe, rangée dans la classe Dispatcher, qu'on lit avec ::. public/index.php reçoit toutes les adresses du site et confie au routeur le soin de choisir la page : c'est le contrôleur frontal.