Débutant55 min35 XP
Objectifs de cette leçon
- Définir des routes GET, POST, PUT, DELETE
- Utiliser les route parameters et middleware
- Organiser les routes avec des groupes
Routes et contrôleurs Laravel 🛣️
Le rôle des routes
Les routes sont le point d'entrée de toute requête HTTP dans Laravel. Elles définissent :
- L'URL (
/users,/posts/1) - La méthode HTTP (GET, POST, PUT, DELETE)
- Le contrôleur et la méthode à appeler
💡 Les routes sont comme un standard téléphonique : elles reçoivent les appels (requêtes) et les dirigent vers le bon service (contrôleur).
Les fichiers de routes
Laravel organise les routes dans 4 fichiers sous routes/ :
| Fichier | Préfixe URL | Middleware | Usage principal |
|---|---|---|---|
api.php | /api | api | API RESTful (JSON) |
web.php | — | web | Pages web (Blade, sessions) |
console.php | — | — | Commandes Artisan |
channels.php | — | — | Broadcasting (WebSockets) |
⚠️ Pour une API, on utilise TOUJOURS
routes/api.php. Les routes y sont automatiquement préfixées par/apiet appliquent le middlewareapi.
Syntaxe des routes
Route simple avec closure
// routes/api.php Route::get('/ping', function () { return response()->json(['message' => 'pong']); });
Route avec contrôleur (recommandé ✅)
Route::get('/users', [UserController::class, 'index']); Route::post('/users', [UserController::class, 'store']); Route::get('/users/{id}', [UserController::class, 'show']); Route::put('/users/{id}', [UserController::class, 'update']); Route::delete('/users/{id}', [UserController::class, 'destroy']);
Paramètres dynamiques
Route::get('/users/{id}', [UserController::class, 'show']); Route::get('/users/{id}/posts/{postId}', [UserController::class, 'showPost']);
Contraintes de validation
Route::get('/users/{id}', [UserController::class, 'show'])->where('id', '[0-9]+');
Les contrôleurs 🎯
Un contrôleur regroupe la logique métier liée à une ressource.
Création
php artisan make:controller UserController
Structure RESTful standard
| Méthode HTTP | URL | Méthode du contrôleur | Action |
|---|---|---|---|
| GET | /users | index() | Lister toutes les ressources |
| POST | /users | store() | Créer une nouvelle ressource |
| GET | /users/{id} | show() | Afficher une ressource |
| PUT/PATCH | /users/{id} | update() | Modifier une ressource |
| DELETE | /users/{id} | destroy() | Supprimer une ressource |
class UserController extends Controller { public function index() { // 👇 Retourne tous les utilisateurs en JSON return response()->json(User::all()); } public function show($id) { $user = User::findOrFail($id); return response()->json($user); } public function store(Request $request) { $user = User::create($request->validate([ 'name' => 'required|string', 'email' => 'required|email|unique:users', ])); return response()->json($user, 201); } }
Le cycle complet d'une requête API 🔄
- 🌐 Requête — Le client envoie
GET /api/users - 🛣️ Route — Laravel trouve
Route::get('/users', [UserController::class, 'index']) - 🎯 Contrôleur — Laravel appelle
UserController::index() - 🗄️ Eloquent —
User::all()génèreSELECT * FROM users - 📦 JSON —
response()->json($users)convertit en JSON - 📨 Réponse — Laravel renvoie la réponse HTTP 200
- ✅ Client — Le frontend reçoit les données
Client Laravel BDD │ │ │ │── GET /api/users ───→│ │ │ │── SELECT * FROM ────→│ │ │←────── résultats ────│ │←──── JSON 200 ──────│ │ │ │ │
Bonnes pratiques ✅
- Toujours utiliser des contrôleurs pour les routes qui font plus qu'un simple retour
- Nommer les routes pour faciliter les liens :
Route::get(...)->name('users.index') - Grouper les routes par préfixe :
Route::prefix('admin')->group(...) - Valider les données dans le contrôleur avec
$request->validate() - Retourner les bons codes HTTP : 200 (OK), 201 (créé), 404 (non trouvé), 422 (validation), 500 (erreur)
- Utiliser
findOrFail()plutôt quefind()pour éviter les erreurs silencieuses
Pièges fréquents 🚨
| Piège | Solution |
|---|---|
❌ Oublier le préfixe /api dans l'URL | Les routes api.php sont automatiquement préfixées par /api |
❌ Utiliser GET /api/users/delete/1 | Utilise DELETE /api/users/1 (REST) |
| ❌ Mettre toute la logique dans la route | Utilise un contrôleur dédié |
| ❌ Retourner du HTML depuis une API | Toujours retourner response()->json() |
| ❌ Ignorer les status codes | Laravel définit 200 par défaut, mais 201 pour les créations |
Exercices pour toi 🎯
- Pratique : Ajoute une route
GET /api/postsqui pointe versPostController@index. Crée le contrôleur avec Artisan. - REST : Écris les 5 routes REST pour une ressource
products. - Validation : Ajoute une validation dans
store():namerequis (string, max:255),pricerequis (numeric, min:0). - Paramètre : Crée une route
GET /api/users/{id}/postsqui retourne les posts d'un utilisateur. - Défi : Ouvre le simulateur ci-dessous. Clique sur chaque étape du cycle requête → réponse pour visualiser le flux complet.
⚡ Simulateur — Routes et contrôleurs
Étape 1/7📝 Pseudo-code
1# Routes et contrôleurs Laravel
2GET /api/users → routes/api.php # ⬅ requête entrante
3Route::get('/users', [UserController::class, 'index']) # ⬅ correspondance de route
4
5class UserController extends Controller {
6 public function index() { # ⬅ dispatch vers le contrôleur
7 $users = User::all(); # ⬅ Eloquent : tous les utilisateurs
8 return response()->json($users); # ⬅ réponse JSON
9 }
10}
11⬅ Réponse HTTP 200 + JSON envoyé au client # ⬅ réponse transmise
12Frontend: fetch('/api/users').then(data => ...) # ⬅ le client reçoit les données
🔄 Cycle route → contrôleur → JSON
⚡ Flux de la requête
🌐Requête▶
🛣️Route
🎯Contrôleur
🗄️Eloquent
📦JSON
📨HTTP
✅Client
🌐Requête entrante
Méthode : GET
URL : /api/users
Un client externe initie la communication.
Le fichier routes/api.php reçoit la requête grâce au préfixe /api défini dans RouteServiceProvider.
💡 Cycle complet d'une route API
📨 Requête HTTP→🛣️ Route→🎯 Contrôleur→🗄️ Eloquent→📦 JSON→📨 Réponse→✅ Client
Le fichier routes/api.php est le point d'entrée de toute requête préfixée par /api.