Chapitre 5 du parcours Apprendre PHP 8
Chaque article a son adresse
9 exercices · 1 250 XP · environ 3 h
composer requireDépendancevendor/Méthode statiqueSéparation des responsabilitésuseFonction anonymeTableau associatifisset()RouteurContrôleur frontalConstante de classe$_SERVERParamètre de routeLienMéthodeEnumfrom()Code HTTP404405http_response_codetryFrom()ExceptionthrowtrycatchHéritageextendsparent::Exception personnalisée
Les exercices du chapitre
-
Installer un routeur
Exercice 1 · 100 XP · 3 objectifs vérifiés par des tests
La gazette n'a qu'une page, et Madame Lou voudrait que chaque article ait la sienne, avec son adresse : /articles/la-fete-de-la-citrouille. Pour faire correspondre une adresse à du code, il faut un routeur. On pourrait l'écrire soi-même, mais d'autres l'ont déjà très bien fait : FastRoute, de Nikita Popov, l'un des développeurs de PHP.
composer requireDépendancevendor/
-
La rédaction déménage
Exercice 2 · 100 XP · 3 objectifs vérifiés par des tests
Le neveu d'Odette a fait le ménage pendant la nuit. Les publications vivent maintenant dans src/Contenu/Redaction.php, et chaque article a reçu un slug, son nom dans les adresses : la-fete-de-la-citrouille. L'en-tête du journal, lui, est passé dans src/Web/Page.php. Il vous laisse un mot : « index.php n'a plus besoin de tout savoir. Il demande les publications à la rédaction, et la mise en page à Page. »
Méthode statiqueSéparation des responsabilitésuse
-
Des fonctions sans nom
Exercice 3 · 150 XP · 5 objectifs vérifiés par des tests
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.
-
Le contrôleur frontal
Exercice 4 · 150 XP · 5 objectifs vérifiés par des tests
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.
RouteurContrôleur frontalConstante de classe$_SERVER
-
Une page par article
Exercice 5 · 150 XP · 4 objectifs vérifiés par des tests
Sur la une, on ne lit que le début de chaque article. Les villageois veulent la suite ! Chaque article aura sa page, à l'adresse /articles/ suivie de son slug.
-
Les rubriques en ligne
Exercice 6 · 150 XP · 3 objectifs vérifiés par des tests
Gaston ne lit que la météo, Odette que la fête du village. Chaque rubrique aura sa page : /rubriques/meteo, /rubriques/fete-du-village, /rubriques/faits-divers. Le nom dans l'adresse est la valeur de l'énumération Rubrique, celle que vous lui avez donnée au chapitre 2.
Paramètre de routeEnumfrom()
-
Le facteur l'a perdu
Exercice 7 · 150 XP · 5 objectifs vérifiés par des tests
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.
Code HTTP404405http_response_codetryFrom()
-
L'article introuvable
Exercice 8 · 150 XP · 3 objectifs vérifiés par des tests
Le neveu d'Odette prépare une page « Les articles de Gaston », et il a oublié de tester le null de Redaction::article(). Résultat : Call to a member function versHtmlComplet() on null, une erreur qui arrive loin de sa cause et ne dit pas ce qui manque. Chaque nouvel appel à Redaction::article() devra-t-il penser au null ? Non : quand l'article n'existe pas, Redaction::article() va lancer une exception, et le contrôleur frontal l'attrapera une fois pour toutes.
Exceptionthrowtrycatch
-
Une exception à son nom
Exercice 9 · 150 XP · 4 objectifs vérifiés par des tests
Le neveu d'Odette s'inquiète. Le contrôleur frontal attrape toutes les exceptions : le jour où la gazette aura une base de données et qu'elle tombera en panne, les lecteurs verront « Le facteur l'a perdu » au lieu d'une vraie erreur, et personne ne cherchera la panne. Il faut une exception à part, qui veut dire « cet article n'existe pas », et n'attraper qu'elle.
Héritageextendsparent::Exception personnalisée