Madame Lou a de grands projets : une page par article, une page par rubrique, un formulaire pour les petites annonces… Toutes ces adresses arriveront dans le même public/index.php. Il lui faut donc un moyen de choisir quoi afficher selon l'adresse demandée. Avant d'appeler un outil à la rescousse, construisons-le à la main, avec des fonctions anonymes.
Votre mission
-
Rangez la fabrication de la une dans une fonction anonyme, stockée dans une variable
$une. Elle renvoie la page avecreturn Page::rendre(...), au lieu de l'afficher :$une = function (): string { // … $html comme avant … return Page::rendre('La Gazette de Saint-Glinglin', $html . '</main>'); };
-
Déclarez le tableau des pages du site, qui associe une adresse à la fonction qui la fabrique :
$pages = ['/' => $une];. -
Retrouvez l'adresse demandée avec
Url::cheminDemande(). Si elle est dans le tableau (isset()), appelez sa fonction et affichez ce qu'elle renvoie.
La une ne change pas. Une adresse inconnue, comme /nulle-part, affiche pour l'instant une page blanche : la page d'erreur viendra plus tard.
Pourquoi Url::cheminDemande() ?
L'adresse demandée est dans $_SERVER['REQUEST_URI'], mais pas toute seule. Dans l'aperçu de l'éditeur, la gazette est servie sous un préfixe (/preview/…), et un lien partagé sur LinkedIn ajoute ?utm_source=linkedin à la fin. Url::cheminDemande() retire les deux et ne garde que le chemin : /.
Rappel
Une fonction anonyme est une fonction sans nom, qu'on range dans une variable comme n'importe quelle valeur. On l'appelle avec des parenthèses après la variable : $une(). Comme elle est une valeur, elle peut aussi se ranger dans un tableau : $pages['/']() appelle la fonction de l'adresse /. isset() vérifie qu'une clé existe dans un tableau avant de s'en servir. Ce tableau d'adresses et de fonctions, c'est déjà un routeur, fait main.