Documentation · Chapitre 05

Organiser les vues
par fonctionnalité.

Quand une application grandit, des noms précis et des dossiers prévisibles évitent de chercher au hasard.

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

Déplacez les vues Livres ensemble

phpaml — zsh
src/views/books/index.php
src/views/books/create.php
src/views/books/edit.php

Le chemin donné au contrôleur est toujours relatif à src/views. Il faut donc mettre à jour les appels.

phpaml — zsh
return $this->view('books/index.php', ['books' => $books]);
return $this->view('books/create.php', ['errors' => [], 'old' => []]);
return $this->view('books/edit.php', ['book' => $book, 'errors' => []]);

Extrayez le formulaire partagé

src/views/partials/book-form.php

phpaml — zsh
<label for="title">Titre</label>
<input id="title" name="title" type="text" required
       value="<?= $view->escape($values['title'] ?? '') ?>">
<?php foreach ($errors['title'] ?? [] as $error): ?>
    <p class="field-error" role="alert"><?= $view->escape($error) ?></p>
<?php endforeach; ?>

<label for="author">Auteur</label>
<input id="author" name="author" type="text" required
       value="<?= $view->escape($values['author'] ?? '') ?>">
<?php foreach ($errors['author'] ?? [] as $error): ?>
    <p class="field-error" role="alert"><?= $view->escape($error) ?></p>
<?php endforeach; ?>

Utilisez-le pour créer et modifier

phpaml — zsh
<form method="post" action="<?= $view->escape($action) ?>">
    <?= $view->csrfField() ?>
    <?php $view->partial('book-form.php', [
        'values' => $values,
        'errors' => $errors,
    ]) ?>
    <button type="submit"><?= $view->escape($submitLabel) ?></button>
</form>

Le contrôleur transmet action, values et submitLabel. Le même partiel affiche les champs; la page reste responsable de l’adresse d’envoi et du texte du bouton.

Règle pratique

Extrayez un partiel lorsque le même bloc apparaît réellement dans plusieurs pages ou lorsqu’il représente une unité claire comme une navigation. Ne découpez pas chaque balise en fichier : trop de petits fichiers rendent le trajet plus difficile à suivre.