Passer au contenu principal

Routage de base

La route la plus simple de Laravel prend un URI et une closure. Sans fichier de configuration complexe, vous définissez facilement une route et son comportement.
use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {
    return 'Hello World';
});

Fichiers de route par défaut

Toutes les routes Laravel sont définies dans les fichiers du répertoire routes/. Ces fichiers sont chargés automatiquement par Laravel selon la configuration de bootstrap/app.php. routes/web.php définit les routes destinées au navigateur. Le groupe de middlewares web s’y applique, fournissant sessions, protection CSRF et chiffrement des cookies.
use App\Http\Controllers\UserController;

Route::get('/user', [UserController::class, 'index']);

Routes d’API

Si votre application propose une API sans état, activez le routing API via la commande Artisan install:api.
php artisan install:api
La commande install:api installe Laravel Sanctum et crée le fichier routes/api.php. Sanctum fournit une garde d’authentification par tokens API simple et robuste pour les consommateurs API tiers, les SPA et les applications mobiles.
Route::get('/user', function (Request $request) {
    return $request->user();
})->middleware('auth:sanctum');
Les routes de routes/api.php sont sans état et le groupe de middlewares api s’y applique. De plus, le préfixe /api est ajouté automatiquement à toutes les routes ; vous n’avez pas à le préfixer manuellement. Pour modifier le préfixe, éditez bootstrap/app.php.
->withRouting(
    api: __DIR__.'/../routes/api.php',
    apiPrefix: 'api/admin',
    // ...
)

Verbes HTTP disponibles

Le routeur peut enregistrer des routes pour tous les verbes HTTP.
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
Pour répondre à plusieurs verbes, utilisez match ou any.
Route::match(['get', 'post'], '/', function () {
    // ...
});

Route::any('/', function () {
    // ...
});
Dans les formulaires HTML POST, PUT, PATCH ou DELETE du fichier web, incluez toujours la directive @csrf. Sinon la requête sera rejetée.

Routes retournant une vue

Si votre route ne fait que retourner une vue, Route::view est plus concis.
Route::view('/welcome', 'welcome');

// Passer des données à la vue
Route::view('/welcome', 'welcome', ['name' => 'Taylor']);

Paramètres de route

Paramètres obligatoires

Pour capturer une partie dynamique de l’URL, utilisez un paramètre de route. Encadrez-le de {} et récupérez-le comme argument de la closure.
Route::get('/user/{id}', function (string $id) {
    return 'ID utilisateur : ' . $id;
});
Plusieurs paramètres sont possibles.
Route::get('/posts/{post}/comments/{comment}', function (string $postId, string $commentId) {
    return "Commentaire {$commentId} du post {$postId}";
});
Un paramètre de route ne peut pas contenir le caractère /.

Paramètres optionnels

Pour rendre un paramètre optionnel, ajoutez ? à son nom et donnez une valeur par défaut à l’argument correspondant.
Route::get('/user/{name?}', function (?string $name = null) {
    return $name ?? 'Invité';
});

Route::get('/user/{name?}', function (?string $name = 'Invité') {
    return $name;
});

Contraintes par expressions régulières

La méthode where permet de contraindre le format d’un paramètre par une regex.
Route::get('/user/{id}', function (string $id) {
    // ...
})->where('id', '[0-9]+');

Route::get('/user/{name}', function (string $name) {
    // ...
})->where('name', '[a-zA-Z]+');
Des méthodes pratiques existent pour les motifs courants.
Route::get('/user/{id}/{name}', function (string $id, string $name) {
    // ...
})->whereNumber('id')->whereAlpha('name');

Routes nommées

Les routes nommées permettent de référencer une route par son nom lors de la génération d’URL ou des redirections.
Route::get('/user/profile', function () {
    // ...
})->name('profile');

Génération d’URL vers une route nommée

Utilisez le helper route pour générer une URL depuis un nom de route.
// Génération d'URL
$url = route('profile');

// Génération d'URL avec paramètres
$url = route('user.show', ['id' => 1]);

Redirection

return redirect()->route('profile');

Groupes de routes

Regroupez des routes liées pour partager middlewares, contrôleur, préfixe, etc.

Middleware

Route::middleware(['auth'])->group(function () {
    Route::get('/dashboard', function () {
        // Accessible uniquement aux utilisateurs authentifiés
    });

    Route::get('/account', function () {
        // Accessible uniquement aux utilisateurs authentifiés
    });
});

Contrôleur

Regroupez les routes utilisant le même contrôleur.
use App\Http\Controllers\OrderController;

Route::controller(OrderController::class)->group(function () {
    Route::get('/orders', 'index');
    Route::post('/orders', 'store');
    Route::get('/orders/{id}', 'show');
});

Préfixe

Vous pouvez ajouter un préfixe commun aux URI des routes.
Route::prefix('admin')->group(function () {
    Route::get('/users', function () {
        // Accessible sur /admin/users
    });
    Route::get('/posts', function () {
        // Accessible sur /admin/posts
    });
});

Consultation des routes

Pour afficher toutes les routes définies, utilisez la commande Artisan.
php artisan route:list
Pour inclure les informations sur les middlewares :
php artisan route:list -v
Pour n’afficher que les routes commençant par une URI :
php artisan route:list --path=user

Prochaines étapes

Vues

Découvrez comment créer des vues et leur transmettre des données depuis un contrôleur.
Dernière modification le 13 juillet 2026