Module 11 – Routes & Contrôleurs
Niveau 3 – Laravel fondamental
Objectifs
Routes web et API, association à un contrôleur ou une closure, middleware, et validation (Form Request ou validation intégrée).
Théorie
Routes web (routes/web.php)
Les routes sont définies dans routes/web.php. Par défaut elles ont le middleware web (session, CSRF, cookies).
Closure (fonction anonyme) :
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});
Route::get('/contact', function () {
return 'Page contact';
});
Avec contrôleur :
use App\Http\Controllers\PageController;
Route::get('/', [PageController::class, 'home']);
Route::get('/contact', [PageController::class, 'contact']);
Paramètres dans l’URL :
Route::get('/user/{id}', function (string $id) {
return "User $id";
});
Route::get('/article/{slug}', [ArticleController::class, 'show']);
Paramètre optionnel :
Route::get('/blog/{category?}', function (?string $category = null) {
return $category ?? 'All articles';
});
Contraintes :
Route::get('/user/{id}', function (string $id) {
// ...
})->where('id', '[0-9]+');
Nommer une route : pour générer des URLs avec route('name') :
Route::get('/contact', [PageController::class, 'contact'])->name('contact');
// Dans une vue : <a href="{{ route('contact') }}">Contact</a>
Routes API (routes/api.php)
Dans routes/api.php, les routes sont préfixées par /api et ont le middleware api (pas de session, format JSON attendu). Idéal pour une API REST.
Route::get('/users', [UserController::class, 'index']);
Route::get('/users/{user}', [UserController::class, 'show']);
Route::post('/users', [UserController::class, 'store']);
Contrôleurs
Créer un contrôleur :
php artisan make:controller PageController
Contrôleur avec méthodes :
namespace App\Http\Controllers;
class PageController extends Controller
{
public function home()
{
return view('welcome');
}
public function contact()
{
return view('contact');
}
}
Passer des données à la vue :
public function show(int $id)
{
$user = User::find($id);
return view('user.show', ['user' => $user]);
// ou : return view('user.show', compact('user'));
}
Réponse JSON :
return response()->json(['data' => $users]);
Redirection :
return redirect()->route('home');
return redirect()->back();
Middleware
Les middleware exécutent du code avant (et éventuellement après) le traitement de la requête. Utilisés pour : auth, vérification de rôle, log, rate limiting.
Appliquer à une route :
Route::get('/admin', [AdminController::class, 'index'])->middleware('auth');
Route::get('/profil', [ProfilController::class, 'edit'])->middleware(['auth', 'verified']);
Middleware intégrés : auth, guest, verified, throttle:60,1 (rate limit), etc.
Créer un middleware : php artisan make:middleware CheckAuth, puis enregistrer dans app/Http/Kernel.php ou dans le bootstrap (Laravel 11).
Validation des requêtes
Dans le contrôleur :
use Illuminate\Http\Request;
public function store(Request $request)
{
$validated = $request->validate([
'email' => 'required|email',
'name' => 'required|string|max:255',
]);
// $validated contient uniquement les champs validés
}
En cas d’échec, Laravel renvoie automatiquement une redirection avec les erreurs (en web) ou une réponse JSON (en API). Les erreurs sont disponibles dans la vue avec @error('field') ou $errors->get('field').
Règles courantes : required, email, string, integer, max:255, min:8, confirmed (pour mot de passe + confirmation), unique:users,email.
Exemple complet
routes/web.php :
Route::get('/', [PageController::class, 'home'])->name('home');
Route::get('/articles', [ArticleController::class, 'index'])->name('articles.index');
Route::get('/articles/{article}', [ArticleController::class, 'show'])->name('articles.show');
Route::post('/articles', [ArticleController::class, 'store'])->middleware('auth');
ArticleController :
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|string|max:255',
'body' => 'required|string',
]);
$article = Article::create($validated);
return redirect()->route('articles.show', $article)->with('success', 'Article created.');
}
Bonnes pratiques
- Nommer les routes pour les liens et redirections (
->name('...')). - Valider toutes les entrées utilisateur dans le contrôleur (ou Form Request).
- Controller fin : déléguer la logique métier à des services ou au modèle.
- Middleware : utiliser
authpour les pages protégées,throttlepour limiter les abus.
Quiz – Module 11
Q1. Où sont définies les routes web dans Laravel ?
Q2. Comment passer un paramètre d’URL à une méthode de contrôleur ?
Q3. À quoi sert le middleware auth ?
Q4. Comment renvoyer une vue avec des variables depuis un contrôleur ?
Q5. Que se passe-t-il si la validation $request->validate([...]) échoue ?
Réponses
R1. Dans routes/web.php (et routes/api.php pour l’API).
R2. En mettant le paramètre entre { } dans l’URL (ex. {id}) et en déclarant un argument du même nom dans la méthode du contrôleur (ex. function show(int $id)).
R3. À restreindre l’accès aux utilisateurs connectés ; sinon redirection vers la page de login.
R4. Avec return view('name.view', ['key' => $value]); ou compact('var1', 'var2').
R5. Laravel redirige vers la page précédente (web) ou renvoie une réponse JSON (API) avec les erreurs de validation ; le code après validate() n’est pas exécuté.
Suite
Module 12 – Blade & Frontend Laravel (syntaxe Blade, layouts, composants, formulaires sécurisés).