Léo, le petit-fils du maire, s'amuse à taper n'importe quoi dans la barre d'adresse : /articles/le-maire-a-gagne-au-loto, /rubriques/sport… La gazette lui répond par une page blanche, ou plante. Un vrai site répond « cette page n'existe pas », avec le code HTTP qui va avec, pour que les navigateurs et les moteurs de recherche le comprennent aussi.
Votre mission
-
Ajoutez à
Page, à côté derendre(), une méthode statiqueintrouvable(): string: elle fixe le code 404 avechttp_response_code()et renvoie une page avec<main class="lecture">, le titre<h2>Le facteur l'a perdu</h2>, un mot d'excuse et un lien<a class="retour">vers la une. -
Quand aucune route ne correspond, affichez cette page.
-
Quand la route existe mais pas pour cette méthode (un
POSTsur la une), répondez 405 :$route[0]vaut alorsDispatcher::METHOD_NOT_ALLOWED. Un simplehttp_response_code(405);suffit, avec ou sans page. -
Un article ou une rubrique inconnus répondent aussi 404 :
- pour un article inconnu,
Redaction::article()renvoienull; - pour une rubrique, remplacez
Rubrique::from()parRubrique::tryFrom(). Les deux méthodes existent sur toute énumération à valeurs, maistryFrom('sport')renvoienullau lieu de planter.
Dans les deux cas, testez le
nullet renvoyez la page introuvable :$rubrique = Rubrique::tryFrom($parametres['nom']); if ($rubrique === null) { return Page::introuvable(); }
- pour un article inconnu,
Rappel
Chaque réponse HTTP porte un code : 200 tout va bien, 404 introuvable, 405 méthode non autorisée, 500 erreur du serveur. http_response_code(404) le fixe. Il doit être appelé avant que la page soit envoyée : c'est pour cela que les gestionnaires renvoient le HTML au lieu de l'afficher, et que echo vient en dernier. Rubrique::from() lance une erreur pour une valeur inconnue, Rubrique::tryFrom() renvoie null : à vous de décider quoi faire.