Un premier gabarit

Exercice 1 sur 7 du chapitre 6 · 150 XP · 3 objectifs vérifiés par des tests

Notions abordées : Gabarit<?= ?>ob_start()extract()require

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.

Votre mission

  1. Écrivez Vue::rendre($gabarit, $variables) dans src/Web/Vue.php : elle exécute le fichier templates/<gabarit>.php, où chaque clé de $variables est devenue une variable, et renvoie le HTML produit, sans l'afficher.
  2. Écrivez templates/introuvable.php : le HTML de la page « Le facteur l'a perdu » (<main class="lecture">, le titre, le mot d'excuse, le lien retour), avec <?= Url::vers('/') ?> pour l'adresse de la une.
  3. Page::introuvable() prend son contenu dans ce gabarit : Vue::rendre('introuvable').

À quoi ressemble un gabarit

<?php use Gazette\Web\Url; ?>
<main class="lecture">
    <h2>Le facteur l'a perdu</h2>
    <p><a class="retour" href="<?= Url::vers('/') ?>">← Retour à la une</a></p>
</main>

<?= … ?> est le raccourci de <?php echo …; ?> : il affiche une valeur au milieu du HTML. Tout ce qui est hors des balises PHP est affiché tel quel. Le gabarit est un fichier à part : les use de Vue.php ne s'y appliquent pas, il déclare lui-même use Gazette\Web\Url; sur sa première ligne.

Rappel

Pour écrire Vue::rendre(), trois outils :

ob_get_clean() peut aussi renvoyer false en cas de problème. (string) devant une valeur la convertit en chaîne, comme (int) la convertit en entier : return (string) ob_get_clean(); respecte le type string annoncé.