Documentation · Chapitre 03

Atelier : construire
la page Livres.

Vous allez refaire toute la chaîne sans copier la page À propos. Chaque étape possède un contrôle avant de continuer.

Vous modifierez un seul élément à la fois, dans un fichier précisément indiqué, puis vous contrôlerez le résultat.

MISSION

Afficher trois livres sur /books

  1. Générer BookController.
  2. Préparer un tableau de trois livres.
  3. Transmettre ce tableau à books.php.
  4. Afficher chaque titre et auteur avec foreach.
  5. Déclarer GET /books puis vérifier avec aml routes.

Étape 1 — Le contrôleur

phpaml — zsh
aml make:controller Book

src/controllers/BookController.php

phpaml — zsh
<?php

declare(strict_types=1);

namespace App\Controllers;

use PHPAML\Http\Request;
use PHPAML\Http\Response;
use PHPAML\Mvc\Controller;

final class BookController extends Controller
{
    public function index(Request $request): Response
    {
        $books = [
            ['title' => 'Clean Code', 'author' => 'Robert C. Martin'],
            ['title' => 'The Pragmatic Programmer', 'author' => 'David Thomas & Andrew Hunt'],
            ['title' => 'Design Patterns', 'author' => 'Erich Gamma et al.'],
        ];

        return $this->view('books.php', ['books' => $books]);
    }
}

Ici les données sont volontairement écrites dans le contrôleur pour apprendre le trajet. Plus tard, un service ou un dépôt les récupérera sans modifier la responsabilité de la vue.

Étape 2 — La vue

src/views/books.php

phpaml — zsh
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Mes livres</title>
</head>
<body>
    <main>
        <h1>Mes livres</h1>
        <ul>
            <?php foreach ($books as $book): ?>
                <li>
                    <strong><?= htmlspecialchars($book['title'], ENT_QUOTES, 'UTF-8') ?></strong>
                    — <?= htmlspecialchars($book['author'], ENT_QUOTES, 'UTF-8') ?>
                </li>
            <?php endforeach; ?>
        </ul>
    </main>
</body>
</html>

foreach répète le même fragment HTML pour chaque élément du tableau. La syntaxe avec deux-points et endforeach est du PHP natif particulièrement lisible au milieu du HTML.

Étape 3 — La route

src/routes/WebApp.php

phpaml — zsh
use App\Controllers\AboutController;
use App\Controllers\BookController;
use App\Controllers\HomeController;

// Dans routes():
$this->get('/', [HomeController::class, 'index']);
$this->get('/about', [AboutController::class, 'index']);
$this->get('/books', [BookController::class, 'index']);

Ne remplacez pas les routes existantes : ajoutez l’import et la nouvelle ligne. Une classe utilisée sans son use complet ne pourra pas être trouvée.

Étape 4 — La recette de vérification

phpaml — zsh
aml routes
# Vérifier GET /books

aml test
  1. Confirmez que GET /books apparaît dans aml routes.
  2. Ouvrez http://127.0.0.1:8910/books.
  3. Vérifiez les trois titres et auteurs.
  4. Lancez aml test pour vérifier le projet.

Défis utiles

  • Ajoutez un quatrième livre sans modifier la vue.
  • Ajoutez une propriété year et affichez-la en entier.
  • Ajoutez un lien depuis la page À propos vers /books.
  • Déplacez ensuite la création du tableau dans un BookCatalog, quand vous aurez étudié les services.

EN RÉSUMÉ

Ce qu’il faut retenir

  • Une route associe une adresse à une action.
  • Le contrôleur prépare et transmet les données.
  • La vue affiche et échappe les valeurs.
  • aml routes, le navigateur et aml test forment une vérification progressive.