Routing in Laravel is how you define the paths (URLs) of your application and map them to the logic that should be executed when they are accessed. Laravel’s routing system is powerful, expressive, and supports everything from simple closures to complex controller actions and resourceful routes.
All route definitions are stored in the routes/
directory:
// Simple route with closure
Route::get('/welcome', function () {
return 'Welcome to Laravel!';
});
HTTP Verb | Route Definition | Description |
---|---|---|
GET | Route::get() | Retrieve resources |
POST | Route::post() | Create resources |
PUT/PATCH | Route::put() / Route::patch() | Update resources |
DELETE | Route::delete() | Delete resources |
ANY | Route::any() | Accept any HTTP verb |
MATCH | Route::match(['get', 'post'], ...) | Accept specific verbs |
Route::get('/user/{id}', function ($id) {
return "User ID: " . $id;
});
Route::get('/user/{name?}', function ($name = 'Guest') {
return "Hello, " . $name;
});
Route::get('/profile', [UserController::class, 'show'])->name('profile');
// Generate URL
$url = route('profile');
// Redirect
return redirect()->route('profile');
Route::middleware(['auth'])->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index']);
});
Route::prefix('admin')->group(function () {
Route::get('/users', [AdminController::class, 'users']);
});
Route::namespace('Admin')->group(function () {
Route::get('dashboard', 'DashboardController@index');
});
Route::get('/user/{user}', function (App\Models\User $user) {
return $user;
});
Route::bind('user', function ($value) {
return App\Models\User::where('name', $value)->firstOrFail();
});
Route::resource('posts', PostController::class);
– Generates routes for:
You can limit routes:
Route::resource('posts', PostController::class)->only(['index', 'show']);
Or exclude routes:
Route::resource('posts', PostController::class)->except(['create', 'edit']);
– For APIs without create
/edit
(no views):
Route::apiResource('posts', PostController::class);
– Handle all non-matching routes:
Route::fallback(function () {
return response()->json(['message' => 'Page Not Found'], 404);
});
php artisan route:cache # Cache routes
php artisan route:clear # Clear cached routes
10 - Route Constraints
Route::get('/user/{id}', function ($id) {
return $id;
})->where('id', '[0-9]+');
– For multiple constraints:
Route::get('/post/{slug}/{id}', function ($slug, $id) {
})->where(['slug' => '[a-z\-]+', 'id' => '[0-9]+']);
Feature | Example |
---|---|
Basic route | Route::get('/', fn() => 'Home'); |
Parameter | /user/{id} |
Optional param | /user/{name?} |
Named route | ->name('profile') |
Group | Route::middleware('auth')->group() |
Resource route | Route::resource('posts', PostController::class) |
Fallback | Route::fallback(fn() => response(...)) |