Documentation · Chapitre 05

Transformer une panne
en prochaine action.

Une page d’erreur publique doit être calme, brève et utile. Les détails techniques restent dans l’écran de développement ou les journaux.

Nous améliorons reading-list sans changer sa logique HTTP ni son stockage temporaire en session.

Le dossier est déjà configuré

Le template actuel pointe error_views vers src/views/errors. PHPAML cherche d’abord le fichier du statut, par exemple 404.php, puis default.php si aucun fichier précis n’existe.

phpaml — zsh
src/views/errors/404.php
src/views/errors/500.php
src/views/errors/default.php

Une page 404 utile

src/views/errors/404.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>404 — Page introuvable</title>
    <link rel="stylesheet" href="/css/error.css">
</head>
<body>
<main>
    <p>404</p>
    <h1>Cette page est introuvable.</h1>
    <p>Vérifiez l’adresse ou retournez à votre bibliothèque.</p>
    <a href="/books">Voir mes livres</a>
</main>
</body>
</html>

Une page générique sans fuite

src/views/errors/default.php

phpaml — zsh
<!DOCTYPE html>
<html lang="fr">
<head><meta charset="UTF-8"><title><?= (int) $status ?> — Error</title></head>
<body>
<main>
    <p><?= (int) $status ?></p>
    <h1><?= htmlspecialchars($title, ENT_QUOTES, 'UTF-8') ?></h1>
    <p>La demande n’a pas pu être terminée.</p>
    <?php if ($requestId !== null): ?>
        <p>Référence: <code><?= htmlspecialchars($requestId, ENT_QUOTES, 'UTF-8') ?></code></p>
    <?php endif; ?>
</main>
</body>
</html>

Le numéro de référence permet de retrouver l’incident dans les journaux sans montrer la trace, les chemins internes ou les secrets au visiteur.

Quel fichier pour quel problème ?

404.phpadresse inconnue
500.phperreur interne inattendue
default.php419, 422, 429, 503 et autres
Développement et production sont différents

Avec APP_DEBUG activé, PHPAML peut afficher son panneau détaillé pour corriger le code. En production, le visiteur doit recevoir la page sûre et générique.