Déplacez les vues Livres ensemble
src/views/books/index.php
src/views/books/create.php
src/views/books/edit.phpLe chemin donné au contrôleur est toujours relatif à src/views. Il faut donc mettre à jour les appels.
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
<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
<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.