Chapitre 6 du parcours Apprendre PHP 8

La Gazette est en ligne

7 exercices · 1 200 XP · environ 3 h

Ce chapitre fait travailler : 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

  1. 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

  2. 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

  3. 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()

  4. 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

  5. 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

  6. 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()

  7. 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