Chapitre 6 du parcours Apprendre PHP 8
La Gazette est en ligne
7 exercices · 1 200 XP · environ 3 h
Gabarit<?= ?>ob_start()extract()requireSyntaxe alternativeAccesseurMise en pageEnum::cases()FormulairePOST$_POSTValidationCode 422XSShtmlspecialcharsis_stringGET$_GETChaîne de requêtestr_contains()array_filter()ContrôleurCallable::classInstanciation dynamique
Les exercices du chapitre
-
Un premier gabarit
Exercice 1 · 150 XP · 3 objectifs vérifiés par des tests
Madame Lou veut retoucher la page « Le facteur l'a perdu », mais son HTML est noyé dans des concaténations : '<p><a class="retour" href="' . Url::vers('/') . '">'… Un gabarit (template en anglais) inverse les rôles : c'est un fichier de HTML, avec juste ce qu'il faut de PHP pour y glisser les valeurs. Il faut d'abord l'outil qui les remplit : une classe Vue.
Gabarit<?= ?>ob_start()extract()require
-
Le gabarit de l'article
Exercice 2 · 150 XP · 2 objectifs vérifiés par des tests
La page « Le facteur l'a perdu » a son gabarit, et Madame Lou en veut un pour la page d'un article : son HTML est encore noyé dans les concaténations de versHtmlComplet(). Celui-là demande un peu plus de PHP, car la photo ne s'affiche que si l'article en a une.
Syntaxe alternativeAccesseur
-
Une mise en page commune
Exercice 3 · 150 XP · 4 objectifs vérifiés par des tests
Il reste un gros bloc de HTML dans du PHP : la mise en page de Page::rendre(), coincée dans un heredoc. Elle mérite son gabarit. Et pendant qu'on y est, Gaston réclame un menu pour aller directement à la météo.
GabaritMise en pageEnum::cases()
-
Proposer une petite annonce
Exercice 4 · 200 XP · 5 objectifs vérifiés par des tests
Madame Lou croule sous les petits mots glissés dans sa boîte aux lettres : « Vends brouette », « Cherche chat roux »… Les villageois proposeront désormais leurs petites annonces en ligne. Le neveu d'Odette a déjà dessiné le formulaire, dans templates/proposer-annonce.php : il attend $valeurs, ce qui a été saisi, et $erreurs, la liste des problèmes.
FormulairePOST$_POSTValidationCode 422
-
Pas de piège dans les annonces
Exercice 5 · 200 XP · 4 objectifs vérifiés par des tests
Léo a trouvé un nouveau jeu. Dans le titre d'une annonce, il a tapé "><script>alert('Léo')</script> en laissant le contact vide. Le formulaire est revenu avec ses erreurs… et une fenêtre « Léo » a surgi : son texte est devenu du code, exécuté par le navigateur. C'est une faille XSS (cross-site scripting). Avec un vrai script, Léo pourrait faire faire n'importe quoi à la page de quelqu'un d'autre, en lui envoyant simplement un lien ou un formulaire piégé.
XSShtmlspecialcharsValidationis_string
-
Chercher dans la gazette
Exercice 6 · 150 XP · 5 objectifs vérifiés par des tests
Odette ne retrouve plus l'article sur le concours de soupe, et elle n'a pas envie de parcourir toutes les rubriques. Il faut une recherche : un champ dans l'en-tête, et une page qui affiche les articles dont le titre contient le mot tapé.
GET$_GETChaîne de requêtestr_contains()array_filter()
-
Des contrôleurs en classes
Exercice 7 · 200 XP · 3 objectifs vérifiés par des tests
public/index.php déborde : cinq routes, cinq fonctions anonymes, et bientôt d'autres. Madame Lou demande un dernier rangement avant la mise en ligne : un contrôleur par page, une classe dans src/Controleur/. Le contrôleur frontal ne fera plus qu'associer les adresses aux contrôleurs.
ContrôleurCallable::classInstanciation dynamique