# Repères des modifications : TP3, TP4 et TP5 Les commentaires `TP3`, `TP4` et `TP5` dans le code indiquent **à quel exercice sert chaque partie**. Ils n'ont aucun effet sur le fonctionnement de Laravel. Certains fichiers du TP3 existaient déjà avant les corrections ; le repère identifie la fonctionnalité, pas l'auteur de chaque ligne. Le TP6 a maintenant son propre guide : [`REPERES_TP6.md`](REPERES_TP6.md). Les règles du TP5 ont été déplacées des contrôleurs vers les Form Requests au TP6 ; leur comportement reste le même. ## TP3 - Base de données et Eloquent Objectif : enregistrer des clients et des produits dans SQLite, puis les lire avec Eloquent et les afficher dans Blade. | Fichier | Rôle | | --- | --- | | `database/migrations/2026_09_16_075551_create_clients_table.php` | Crée la table `clients` initiale. | | `database/migrations/2026_09_16_085026_create_product_table.php` | Crée la table `products` au pluriel, selon la convention du modèle `Product`. | | `app/Models/Client.php`, `app/Models/Product.php` | Déclarent les champs `$fillable` pour `create()` et `update()`. Le téléphone a été ajouté au modèle Client au TP5. | | `database/seeders/ClientSeeder.php`, `database/seeders/ProductSeeder.php` | Contiennent les trois clients et les cinq produits d'exemple. | | `database/seeders/DatabaseSeeder.php` | Appelle les deux seeders. | | `app/Http/Controllers/ProductController.php` (`index`) | Lit les produits avec `Product::all()` et transmet les résultats à la vue. | | `resources/views/products/index.blade.php` | Affiche les produits. La liste a ensuite reçu les actions CRUD du TP4. | La liste clients du TP3 est maintenant assurée par `ClientController@index` : `Client::all()` lit la table et `clients.index` affiche les données. L'ancien `ClientsController.php` reste dans le projet, mais les routes utilisent `ClientController.php` depuis le TP4. ## TP4 - CRUD complet Objectif : créer, lister, voir, modifier et supprimer un client ou un produit. | Fichier | Rôle | | --- | --- | | `routes/web.php` | Les deux appels `Route::resource()` génèrent sept routes pour Clients et sept pour Produits. | | `app/Http/Controllers/ClientController.php` | Méthodes `index`, `create`, `store`, `show`, `edit`, `update`, `destroy`. | | `app/Http/Controllers/ProductController.php` | Mêmes actions pour les produits. `index` reprend la lecture du TP3. | | `resources/views/clients/index.blade.php`, `resources/views/products/index.blade.php` | Listes, totaux et actions Voir/Modifier/Supprimer ; indication du stock faible pour les produits. | | `resources/views/clients/create.blade.php`, `resources/views/clients/edit.blade.php` | Formulaires de création et modification d'un client. | | `resources/views/products/create.blade.php`, `resources/views/products/edit.blade.php` | Formulaires équivalents pour les produits. | | `resources/views/clients/show.blade.php`, `resources/views/products/show.blade.php` | Détail d'un seul enregistrement. | | `resources/views/layouts/app.blade.php` | Navigation entre les pages. | | `tests/Feature/CrudTest.php` | Vérifie les opérations CRUD dans une base de test. | Dans les formulaires, `@csrf` protège les requêtes POST et `@method('PUT')` permet la mise à jour. La suppression utilise `@method('DELETE')` dans les listes. ## TP5 - Validation des données Objectif : refuser les données incorrectes avant l'enregistrement, expliquer les erreurs à l'utilisateur et conserver les valeurs saisies. | Fichier | Rôle | | --- | --- | | `database/migrations/2026_10_07_000000_adapt_clients_and_products_for_tp5.php` | Ajoute `phone`, rend `city` facultative et autorise les prix décimaux. | | `app/Models/Client.php` | Ajoute `phone` à `$fillable`. | | `app/Http/Requests/StoreClientRequest.php`, `app/Http/Requests/UpdateClientRequest.php` | Règles TP5 pour le nom, l'email, le téléphone et la ville, déplacées ici au TP6 avec leurs messages français. | | `app/Http/Requests/StoreProductRequest.php`, `app/Http/Requests/UpdateProductRequest.php` | Règles TP5 pour le nom, le prix et le stock, déplacées ici au TP6. | | `resources/views/clients/create.blade.php`, `resources/views/clients/edit.blade.php` | Liste des erreurs, message sous chaque champ et anciennes valeurs avec `old()`. | | `resources/views/products/create.blade.php`, `resources/views/products/edit.blade.php` | Même traitement pour les produits. | | `resources/views/clients/index.blade.php`, `resources/views/clients/show.blade.php` | Affichent le téléphone et gèrent les champs facultatifs vides. | | `tests/Feature/ValidationTp5Test.php` | Vérifie les données refusées, les messages, les anciennes valeurs, les mises à jour et un prix décimal. | Le sujet impose `phone: nullable|string|max:20` : cette règle accepte les lettres. Si le professeur demande un numéro composé uniquement de chiffres et séparateurs, il faudra ajouter une règle spécifique ; le TP5 ne la fournit pas. ## Vérifier et lancer le projet Dans un terminal ouvert dans le dossier `mini-crm` : ```powershell php artisan migrate:status php artisan test php artisan serve ``` Puis ouvrir `http://127.0.0.1:8000/clients` ou `http://127.0.0.1:8000/products`. Les PDF `TP3_walkthrough.pdf`, `TP4_walkthrough_complet.pdf` et `TP5_walkthrough_complet.pdf` détaillent chaque TP. Les commentaires du code servent de repères rapides ; ce fichier indique où chercher.