38 lines
2.8 KiB
Markdown
38 lines
2.8 KiB
Markdown
|
|
# 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.
|
||
|
|
|
||
|
|
```powershell
|
||
|
|
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`.
|