Gestion d'utilisateurs
Exercice : Gestion d'utilisateurs
Introduction
Ce tutoriel vous guidera dans la création d'une application de gestion d'utilisateurs avec Laravel 12. Vous apprendrez à :
- Installer Laravel et configurer l'environnement de développement (Laragon pour Windows, Laravel Herd pour Mac).
- Utiliser Laravel Breeze pour l'authentification et Tailwind CSS pour le style.
- Créer, modifier, supprimer et consulter des utilisateurs.
- Gérer la base de données SQLite et générer des données fictives avec des seeders.
Les sujets couverts incluent :
- Routes, contrôleurs, vues, et gestion de base de données.
- Pagination et recherche des utilisateurs.
Des exercices pratiques vous permettront d'appliquer les concepts expliqués : création d'une vue de détail, édition, suppression et ajout de filtres par rôle.
L'objectif est de comprendre le fonctionnement de Laravel tout en acquérant de l'autonomie pour développer des applications web bien structurées.
Pré-requis et Installation
Pour suivre ce tutoriel, il est nécessaire de disposer d'un environnement de développement configuré correctement. Voici les étapes à suivre :
Pré-requis
- PHP 8.2+ installé sur votre machine.
- Composer (gestionnaire de dépendances PHP).
- Un éditeur de code (comme Visual Studio Code).
Environnement de Développement
- Windows : Utilisez Laragon pour simplifier l'installation et la configuration des services nécessaires (PHP, SQLite, etc.).
- Mac : Utilisez Laravel Herd, une solution facile pour gérer votre environnement Laravel.
Installation de Laravel 12
-
Ouvrez votre terminal.
-
Exécutez la commande suivante pour créer un nouveau projet Laravel :
composer create-project laravel/laravel nom-du-projet
Installation de Laravel Breeze
Laravel Breeze permet d'ajouter rapidement l'authentification à votre application.
-
Installez Laravel Breeze via Composer :
composer require laravel/breeze --dev -
Exécutez la commande pour installer les fichiers de Breeze :
php artisan breeze:install
Attention ! N’installez pas le dark mode ! Si vous l’installez, vous devrez écrire le code Tailwind pour le mode clair ET le mode sombre. C’est 2 fois plus de travail pour un exercice dont ce n’est pas l’objectif.
Votre environnement de développement est maintenant prêt pour commencer à travailler sur la gestion des utilisateurs.
Génération des Données de Démonstration (Seeders)
Dans cette section, nous allons générer des données fictives pour peupler notre application avec une liste d'utilisateurs. Cela nous permettra de tester facilement les fonctionnalités de notre application. Pour cela, nous utiliserons des seeders Laravel.
Modification du DatabaseSeeder
-
Modifier le DatabaseSeeder : Nous devons modifier le fichier
DatabaseSeeder.phppour générer 200 utilisateurs aléatoires et notre compte utilisateur de test.-
Ouvrez le fichier
DatabaseSeeder.phpsitué dans le dossierdatabase/seeders. -
Modifiez la méthode
run()comme suit :public function run() { \App\Models\User::factory(200)->create(); User::factory()->create([ 'name' => 'Test User', 'email' => 'test@example.com', ]); }
-
-
Exécuter le Seeder : Enfin, exécutez le seeder pour remplir la base de données avec les utilisateurs générés.
-
Dans le terminal, lancez la commande :
php artisan db:seed -
Cette commande créera 201 utilisateurs fictifs dans votre base de données.
-
Vérification des Données Générées
- Une fois le seeder exécuté, vous pouvez vérifier les données générées dans votre base de données avec un outil comme phpMyAdmin ou HeidiSQL.
Ces données fictives nous permettront de tester et de valider les fonctionnalités de notre application de manière simple et efficace. Passons maintenant à la création des contrôleurs et des routes nécessaires pour gérer ces utilisateurs.
Ajout d'une Colonne "Rôle" aux Utilisateurs
Pour permettre une gestion plus flexible des utilisateurs, nous allons ajouter une colonne "rôle" à notre table users. Cela nous permettra de distinguer les utilisateurs "admin" des utilisateurs classiques "user".
Création d'une Nouvelle Migration
-
Générer la Migration : Utilisez Artisan pour créer une nouvelle migration qui ajoutera la colonne
roleà la tableusers. Exécutez la commande suivante dans le terminal :php artisan make:migration add_role_to_users_table --table=usersCette commande créera un nouveau fichier de migration dans le dossier
database/migrations. -
Modifier la Migration : Ouvrez le fichier de migration nouvellement créé et ajoutez le code nécessaire pour ajouter la colonne
role:public function up() { Schema::table('users', function (Blueprint $table) { $table->string('role')->default('user'); }); } public function down() { Schema::table('users', function (Blueprint $table) { $table->dropColumn('role'); }); }- La colonne
rolesera ajoutée avec une valeur par défaut de "user".
- La colonne
-
Exécuter la Migration : Pour appliquer cette modification à la base de données, lancez la commande suivante :
php artisan migrate
Mise à Jour de la Factory
Pour attribuer des rôles aux utilisateurs, nous allons maintenant mettre à jour la factory UserFactory.php :
-
Modifier la Factory : Ouvrez le fichier
UserFactory.phpsitué dans le dossierdatabase/factories.-
Ajoutez un champ
roleet utilisez Faker pour que seulement 1 utilisateur sur 10 soit administrateur :'role' => $this->faker->boolean(10) ? 'admin' : 'user', -
Cette ligne attribuera le rôle "admin" à environ 1 utilisateur sur 10, les autres ayant le rôle "user".
-
Vérification des Modifications
-
Exécuter les Migrations et les Seeders : Pour appliquer toutes les modifications et regénérer les utilisateurs, utilisez la commande suivante :
php artisan migrate:fresh --seed- Cette commande va recréer la base de données et exécuter le seeder pour générer de nouveaux utilisateurs avec les rôles mis à jour.
-
Vérifier les Données : Vérifiez dans votre base de données que les utilisateurs ont bien des rôles assignés ("user" ou "admin") et que la distribution respecte bien la règle de 1 administrateur pour 10 utilisateurs.
Avec cette mise à jour, nous sommes maintenant prêts à utiliser ces rôles pour gérer les permissions et personnaliser les fonctionnalités en fonction des types d'utilisateurs.
Création du UserController et des Routes
Maintenant que nous avons une base de données peuplée d'utilisateurs avec des rôles distincts, nous allons créer un contrôleur pour gérer ces utilisateurs et définir les routes nécessaires pour accéder aux différentes actions.
Création du UserController
-
Générer le Contrôleur : Utilisez Artisan pour générer un contrôleur de type ressource qui inclura toutes les actions nécessaires à la gestion des utilisateurs. Dans votre terminal, exécutez la commande suivante :
php artisan make:controller UserController --resourceCette commande créera un fichier
UserController.phpdans le dossierapp/Http/Controllers. -
Comprendre les Méthodes Générées : Le contrôleur ressource généré contient les méthodes suivantes :
index(): Afficher la liste des utilisateurs.create(): Afficher le formulaire de création d'un utilisateur.store(): Sauvegarder un nouvel utilisateur dans la base de données.show($id): Afficher les détails d'un utilisateur spécifique.edit($id): Afficher le formulaire de modification d'un utilisateur.update($id): Mettre à jour les informations d'un utilisateur.destroy($id): Supprimer un utilisateur.
Ces méthodes vont nous permettre de gérer toutes les opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) sur les utilisateurs.
Définition des Routes
-
Ajouter les Routes Ressources : Pour permettre l'accès aux différentes actions du
UserController, nous devons définir des routes. Ouvrez le fichierroutes/web.phpet ajoutez la ligne suivante :Route::resource('users', UserController::class)->middleware('auth');- Cette ligne crée automatiquement toutes les routes nécessaires pour les opérations CRUD sur les utilisateurs.
- Le middleware
auths'assure que seules les personnes connectées peuvent accéder à ces routes.
-
Vérifier les Routes : Pour vérifier que les routes ont été correctement ajoutées, vous pouvez exécuter la commande suivante dans le terminal :
php artisan route:list- Cette commande affichera toutes les routes disponibles dans votre application, y compris celles associées au
UserController.
- Cette commande affichera toutes les routes disponibles dans votre application, y compris celles associées au
Mise en Place des Permissions de Base
- Restreindre l'Accès : Pour l'instant, nous allons simplement restreindre l'accès aux routes des utilisateurs aux personnes connectées grâce au middleware
auth. Plus tard, nous pourrons affiner ces permissions en utilisant les rôles "admin" et "user".
Avec ces routes et ce contrôleur en place, nous avons les fondations nécessaires pour gérer la liste des utilisateurs. La prochaine étape consistera à créer les vues associées pour permettre l'interaction avec notre application via une interface utilisateur conviviale.
Création de la Vue de la liste des utilisateurs
Nous allons maintenant créer une interface pour gérer la liste des utilisateurs, en commençant par l'affichage de cette liste. Nous allons implémenter la méthode du contrôleur, créer la vue correspondante, et configurer la route pour que cette fonctionnalité soit opérationnelle.
Affichage de la Liste des Utilisateurs
-
Lancez le serveur de développement PHP et JavaScript.
-
Lancez votre serveur Laragon et pour le front-end, lancez la commande de dev dans un deuxième terminal :
npm run dev
-
-
Méthode Index dans le UserController
-
Ouvrez le fichier
UserController.phpdans le dossierapp/Http/Controllers. -
Ajoutez la méthode
index()pour récupérer tous les utilisateurs et les passer à la vue :public function index() { $users = User::paginate(10); return view('users.index', ['users' => $users]); }- Cette méthode récupère tous les utilisateurs en utilisant une pagination de 10 utilisateurs par page et les transmet à la vue
index.
- Cette méthode récupère tous les utilisateurs en utilisant une pagination de 10 utilisateurs par page et les transmet à la vue
-
-
Créer la Vue Index
-
Pour afficher la liste des utilisateurs, créez une vue
index.blade.phpdans le dossierresources/views/users. -
Créez d'abord le dossier
usersdansresources/views. -
Ensuite, créez le fichier
index.blade.phpdans le dossierresources/views/users.
-
Ajouter la Structure HTML
-
Ouvrez le fichier
index.blade.phpet ajoutez la structure de base de la page pour afficher la liste des utilisateurs :<x-app-layout> <div class="container mx-auto py-8"> <h1 class="text-2xl font-bold mb-6">Liste des Utilisateurs</h1>
-
| Nom | Rôle | Actions | |
|---|---|---|---|
| {{ $user->name }} | {{ $user->email }} | {{ $user->role }} | [Voir]({{ route('users.show', $user->id) }}) [Modifier]({{ route('users.edit', $user->id) }}) |
<div class="mt-6">
{{ $users->links() }}
</div>
</div>
</x-app-layout>
```
- Ce code crée une table qui affiche les utilisateurs, leur email, leur rôle, et propose des actions pour chaque utilisateur (voir, modifier).
-
Ajouter la Route Index
-
Le
UserControllerétant un contrôleur de type ressource, la route pour accéder à la méthodeindexest déjà incluse. Inutile d'ajouter une nouvelle route, car elle est générée automatiquement par la ligne suivante dansweb.php:Route::resource('users', UserController::class)->middleware('auth');
-
-
Vérifier la Fonctionnalité
- Vous pouvez maintenant accéder à la liste des utilisateurs via l'URL
/users. Vérifiez que la pagination fonctionne bien et que les utilisateurs sont correctement affichés.
- Vous pouvez maintenant accéder à la liste des utilisateurs via l'URL
Avec cette fonctionnalité complète en place, les utilisateurs connectés peuvent visualiser la liste des utilisateurs avec une pagination de 10 utilisateurs par page.
Exercice : Création de la Vue Show
Maintenant que la vue index est en place, le premier exercice consistera à créer une vue pour afficher les détails d'un utilisateur spécifique.
-
Méthode Show dans le UserController
- Implémentez la méthode
show($id)dans leUserControllerpour récupérer un utilisateur spécifique. - Transmettez cet utilisateur à la vue
show.
- Implémentez la méthode
-
Créer la Vue Show
- Créez la vue
show.blade.phpdans le dossierresources/views/users. - Ajoutez-y les informations de l'utilisateur, comme son nom, son email, et son rôle.
- Créez la vue
L'objectif est de rendre la fonctionnalité de visualisation d'un utilisateur complet à partir de la vue index. La prochaine étape consistera à implémenter la fonctionnalité de création d'un utilisateur, en suivant la même approche pour rendre la fonctionnalité entièrement opérationnelle.
Création d'un Nouvel Utilisateur
Dans cette section, nous allons implémenter la fonctionnalité permettant de créer un nouvel utilisateur. Nous allons développer la méthode create() et store() dans le contrôleur, créer la vue correspondante pour le formulaire de création, et nous assurer que la fonctionnalité est entièrement opérationnelle.
Méthode Create et Store dans le UserController
-
Méthode Create
-
Ouvrez le fichier
UserController.phpdans le dossierapp/Http/Controllers. -
Ajoutez la méthode
create()pour retourner la vue permettant de créer un utilisateur :public function create() { return view('users.create'); }- Cette méthode renvoie la vue
createqui contient le formulaire de création d'un utilisateur.
- Cette méthode renvoie la vue
-
-
Méthode Store
-
Ajoutez la méthode
store()pour enregistrer un nouvel utilisateur dans la base de données :public function store(Request $request) { $validatedData = $request->validate([ 'name' => 'required|string|max:255', 'email' => 'required|email|unique:users,email', 'password' => 'required|string|min:8', 'role' => 'required|in:user,admin', ]); User::create([ 'name' => $validatedData['name'], 'email' => $validatedData['email'], 'password' => bcrypt($validatedData['password']), 'role' => $validatedData['role'], ]); return redirect()->route('users.index')->with('success', 'Utilisateur créé avec succès.'); }- Cette méthode valide les données entrantes, crée un nouvel utilisateur, et redirige vers la liste des utilisateurs avec un message de succès.
-
Création de la Vue Create
-
Créer le Fichier de Vue Create
-
Créez manuellement une nouvelle vue
create.blade.phpdans le dossierresources/views/usersou avec cette commande :touch resources/views/users/create.blade.php
-
-
Ajouter le Formulaire de Création
-
Ouvrez
create.blade.phpet ajoutez le formulaire pour créer un utilisateur :<x-app-layout> <div class="container mx-auto py-8"> <h1 class="text-2xl font-bold mb-6">Créer un Nouvel Utilisateur</h1> <form action="{{ route('users.store') }}" method="POST"> @csrf <div class="mb-4"> <label class="block text-sm font-bold mb-2">Nom</label> <input type="text" name="name" class="w-full border border-gray-300 px-3 py-2" value="{{ old('name') }}"> @error('name') <div class="text-red-500 text-sm mt-1">{{ $message }}</div> @enderror </div> <div class="mb-4"> <label class="block text-sm font-bold mb-2">Email</label> <input type="email" name="email" class="w-full border border-gray-300 px-3 py-2" value="{{ old('email') }}"> @error('email') <div class="text-red-500 text-sm mt-1">{{ $message }}</div> @enderror </div> <div class="mb-4"> <label class="block text-sm font-bold mb-2">Mot de passe</label> <input type="password" name="password" class="w-full border border-gray-300 px-3 py-2"> @error('password') <div class="text-red-500 text-sm mt-1">{{ $message }}</div> @enderror </div> <div class="mb-4"> <label class="block text-sm font-bold mb-2">Rôle</label> <select name="role" class="w-full border border-gray-300 px-3 py-2"> <option value="user">Utilisateur</option> <option value="admin">Administrateur</option> </select> @error('role') <div class="text-red-500 text-sm mt-1">{{ $message }}</div> @enderror </div> <button type="submit" class="bg-blue-500 text-white px-4 py-2">Créer</button> </form> </div> </x-app-layout> -
Ce formulaire permet de créer un utilisateur avec les champs nom, email, mot de passe, et rôle. Les messages d'erreur s'affichent sous chaque champ si les validations échouent.
-
Vérifier la Fonctionnalité
-
Accéder à la Vue de Création
- D’abord, connectez-vous à l’application avec ces identifiants :
- email : test@example.com
- mdp : password
- Pour retrouver les identifiants, cherchez dans les fichiers
DatabaseSeederetUserFactory. - Pour accéder au formulaire de création, utilisez l'URL
/users/create. Cette route est déjà incluse dans leUserControllergrâce à la déclaration de route ressource.
- D’abord, connectez-vous à l’application avec ces identifiants :
-
Tester la Création
- Remplissez le formulaire et créez un utilisateur. Vous devriez être redirigé vers la liste des utilisateurs avec un message de succès affiché.
Avec cette fonctionnalité complète, nous avons désormais la possibilité de créer de nouveaux utilisateurs à travers une interface conviviale. La prochaine étape consistera à implémenter la fonctionnalité de modification d'un utilisateur, en laissant une partie sous forme d'exercice pour renforcer la compréhension.
Exercice : Modification d'un Utilisateur
Pour cet exercice, vous allez implémenter la fonctionnalité permettant de modifier un utilisateur existant. Cette fonctionnalité vous permettra de consolider vos compétences en implémentant des méthodes dans le contrôleur, en créant une vue, et en testant la mise à jour d'un enregistrement.
Objectifs de l'Exercice
- Ajouter la méthode
edit()dans leUserControllerpour retourner le formulaire de modification d'un utilisateur spécifique. - Ajouter la méthode
update()dans leUserControllerpour enregistrer les modifications dans la base de données. - Créer une vue
edit.blade.phppour permettre la modification des informations de l'utilisateur.
Étapes à Suivre
-
Méthode Edit dans le UserController
- Implémentez la méthode
edit($id)pour récupérer l'utilisateur à modifier et le passer à la vueedit. - Utilisez la méthode
findOrFail()pour vous assurer que l'utilisateur existe.
- Implémentez la méthode
-
Créer la Vue Edit
-
Créez la vue
edit.blade.phpdans le dossierresources/views/users. -
Ajoutez un formulaire similaire à celui de création (
create.blade.php), mais pré-remplissez les champs avec les valeurs actuelles de l'utilisateur. -
Le formulaire doit utiliser la méthode
POSTet la directive@method('PUT')en plus de la directive@csrf. -
Utilisez la fonction
old()combinée aux valeurs actuelles de l'utilisateur pour remplir les champs. Par exemple :-
Pour le champ nom :
<input type="text" name="name" value="{{ old('name', $user->name) }}" class="w-full border border-gray-300 px-3 py-2"> -
Cela permet de conserver la valeur entrée en cas d'erreur de validation.
-
-
-
Méthode Update dans le UserController
- Implémentez la méthode
update($id)pour valider les données et mettre à jour l'utilisateur dans la base de données. - Validez les champs comme pour la méthode
store(), et assurez-vous de prendre en compte l'utilisateur existant pour éviter les doublons d'email. - Redirigez vers la liste des utilisateurs avec un message de succès après la mise à jour.
- Implémentez la méthode
Vérification de la Fonctionnalité
- Accéder à la Vue de Modification : Utilisez l'URL
/users/{id}/editpour accéder au formulaire de modification d'un utilisateur spécifique. - Tester la Modification : Remplissez le formulaire avec les nouvelles informations et enregistrez les modifications. Vérifiez que l'utilisateur est mis à jour avec succès et que vous êtes redirigé vers la liste des utilisateurs avec un message de confirmation.
Points à Retenir
- Utilisez la fonction
old()pour maintenir les valeurs saisies par l'utilisateur en cas d'erreur de validation. - La méthode
update()est similaire àstore(), mais elle prend en compte l'utilisateur existant et met à jour les champs nécessaires.
Cet exercice vous permettra de mieux comprendre comment gérer la mise à jour des ressources dans Laravel. Prenez le temps de tester et de vous assurer que toutes les validations fonctionnent correctement.
Exercice : Suppression d'un Utilisateur
Dans cet exercice, vous allez implémenter la fonctionnalité permettant de supprimer un utilisateur existant.
Objectifs de l'Exercice
-
Ajouter un bouton de suppression à la vue
index.blade.phppour chaque utilisateur. -
Ajouter la méthode
destroy()dans leUserControllerpour supprimer un utilisateur. -
Assurer la protection de la route de suppression avec un formulaire utilisant la méthode
POSTet un token CSRF.
Étapes à Suivre
-
Ajouter un Bouton de Suppression à la Vue Index
-
Ouvrez la vue
index.blade.phpet ajoutez un bouton de suppression pour chaque utilisateur. -
Assurez-vous que le bouton est placé dans un formulaire avec la méthode
POSTet que la directive@method('DELETE')est utilisée. -
Utilisez la directive
@csrfpour inclure un token CSRF et protéger la requête contre les attaques CSRF.
-
-
Méthode Destroy dans le UserController
-
Implémentez la méthode
destroy($id)dans leUserControllerpour supprimer l'utilisateur. -
Utilisez la méthode
findOrFail()pour récupérer l'utilisateur à supprimer et appelez la méthodedelete()sur l'utilisateur. -
Redirigez vers la liste des utilisateurs avec un message de succès après la suppression.
-
-
Vérifier la Fonctionnalité
-
Tester la Suppression : Accédez à la liste des utilisateurs, cliquez sur le bouton de suppression pour un utilisateur et vérifiez que celui-ci est bien supprimé.
-
Vérifier la Redirection : Assurez-vous que vous êtes redirigé vers la liste des utilisateurs avec un message confirmant la suppression.
-
Points à Retenir
-
Utilisez un formulaire avec une méthode
POSTet la directive@method('DELETE')pour effectuer la suppression d'un utilisateur. -
La directive
@csrfest essentielle pour protéger votre application des attaques CSRF.
Cet exercice vous permettra de mieux comprendre comment gérer la suppression des ressources dans Laravel tout en assurant la sécurité des opérations.
Exercice : Ajout de la Recherche sur le Nom et l'Email
Dans cette section, nous allons implémenter une fonctionnalité de recherche pour permettre aux utilisateurs de rechercher des noms ou des emails dans la liste des utilisateurs sur la page index. Cette recherche sera envoyée à l'aide d'un formulaire avec un paramètre GET.
Objectifs
- Ajouter un formulaire de recherche sur la vue
index.blade.php. - Modifier la méthode
index()dans leUserControllerpour inclure la logique de recherche. - Gérer la recherche via un paramètre
GET.
Étapes à Suivre
-
Ajouter le Formulaire de Recherche à la Vue Index
- Ouvrez la vue
index.blade.phpet ajoutez un formulaire de recherche en haut de la page. - Ce formulaire doit contenir un champ
inputpour la recherche, ainsi qu'un bouton pour soumettre le formulaire. - Utilisez la méthode
GETdans le formulaire pour que les critères de recherche apparaissent dans l'URL. - Exemple : placez un champ de texte avec un bouton "Rechercher" à côté pour soumettre la recherche.
- Ouvrez la vue
-
Méthode Index dans le UserController
- Modifiez la méthode
index()dans leUserControllerpour inclure la logique de recherche. - Récupérez le paramètre
searchà partir de la requête et utilisez-le pour filtrer les utilisateurs. - Utilisez la méthode
where()sur le modèleUserpour rechercher par nom ou par email en fonction de la valeur du paramètresearch. - Assurez-vous de conserver la pagination, même lors de l'application du filtre de recherche.
- Modifiez la méthode
-
Afficher les Critères de Recherche
- Lorsque les résultats de recherche sont affichés, le champ de recherche doit préserver la valeur de la recherche en cours pour indiquer ce que l'utilisateur a recherché.
- Utilisez la fonction
old()ourequest()->input()pour pré-remplir le champ de recherche avec la valeur précédemment saisie.
Conseils pour la Recherche
- La recherche devrait être insensible à la casse pour rendre l'expérience utilisateur plus agréable.
- Vous pouvez utiliser la méthode
orWhere()pour permettre de rechercher à la fois sur le nom et sur l'email. - Pensez à ajouter un message indiquant à l'utilisateur s'il n'y a aucun résultat correspondant aux critères de recherche.
Vérification de la Fonctionnalité
- Tester la Recherche : Accédez à la liste des utilisateurs et effectuez une recherche en entrant un nom ou un email dans le champ de recherche. Cliquez sur le bouton "Rechercher" et vérifiez que la liste des utilisateurs se met à jour correctement.
- Tester l'Absence de Résultats : Entrez une valeur qui ne correspond à aucun utilisateur et vérifiez que le message d'absence de résultats s'affiche correctement.
Points à Retenir
- La recherche doit être intuitive pour l'utilisateur, avec une interface claire et un retour approprié lorsque aucun résultat n'est trouvé.
- Utiliser des paramètres
GETpermet de partager facilement les critères de recherche via l'URL.
Cette fonctionnalité de recherche vous permettra de rendre votre application plus pratique et plus efficace pour l'utilisateur final.
