Files

2.8 KiB

Repères TP6 dans le code

Le TP6 a déplacé la validation hors des contrôleurs et ajouté la recherche et la pagination. Les commentaires TP6 indiquent les lignes importantes directement dans le projet.

Fichier Ce qui a été fait
app/Http/Requests/StoreClientRequest.php Autorise la création, définit les règles et les messages clients du TP5.
app/Http/Requests/UpdateClientRequest.php Valide la modification et ignore l'email du client courant dans le contrôle d'unicité.
app/Http/Requests/StoreProductRequest.php Valide la création d'un produit.
app/Http/Requests/UpdateProductRequest.php Valide la modification d'un produit.
app/Http/Controllers/ClientController.php Reçoit les Form Requests avec injection de dépendances ; index() cherche dans nom, email et ville, puis pagine par 10.
app/Http/Controllers/ProductController.php Même principe pour les produits ; recherche par nom et, pour le bonus, par prix.
app/Http/Controllers/Controller.php L'ancien index() vide a été retiré pour laisser chaque contrôleur définir sa propre signature.
resources/views/clients/index.blade.php Formulaire GET, total des résultats, liens de pagination.
resources/views/products/index.blade.php Même chose pour les produits.
resources/views/layouts/app.blade.php Taille lisible des flèches de pagination.
tests/Feature/Tp6SearchPaginationTest.php Tests de recherche, pagination, conservation du filtre et validation Form Request.

À retenir

  • authorize() retourne true dans ce TP : aucune restriction utilisateur n'est encore demandée.
  • rules() décrit les données admises. messages() conserve les messages français du TP5.
  • Laravel construit automatiquement le Form Request déclaré comme paramètre de store() ou update() et le valide avant d'exécuter la méthode.
  • $request->validated() transmet uniquement les données acceptées à Eloquent.
  • ?search=... est un paramètre d'URL ; le formulaire utilise GET car la recherche ne modifie aucune donnée.
  • paginate(10) limite chaque page à 10 éléments ; links() affiche la navigation ; withQueryString() garde search dans les liens suivants.
  • Le total affiché utilise total(), car count() ne compte que les éléments de la page actuelle.
  • Un orderBy('id') stabilise l'ordre des pages.

Pour tester plus de dix clients ou produits, les tests automatisés créent des enregistrements dans une base SQLite temporaire. Ils ne remplissent pas la base personnelle avec des données d'essai.

php artisan test
php artisan serve

Ouvrir ensuite /clients?search=jean et /products?search=clavier dans le navigateur. Le déroulé détaillé et toutes les réponses sont dans TP6_walkthrough_complet.pdf et TP6_rempli.pdf.