Routing
LaravelRoutes define how your application responds to HTTP requests. In Laravel, all web routes are defined in routes/web.php.
Basic Routes
routes/web.php
<?php
use Illuminate\Support\Facades\Route;
// GET request
Route::get('/', function () {
return view('welcome');
});
// Return JSON
Route::get('/api/hello', function () {
return response()->json(['message' => 'Hello!']);
});
// POST request
Route::post('/contact', function () {
return 'Form submitted!';
});
// Multiple methods
Route::match(['get', 'post'], '/form', function () {
return 'GET or POST';
});
// Any method
Route::any('/catch-all', function () {
return 'Any method works';
});
?>Route Parameters
PHP
<?php
// Required parameter
Route::get('/users/{id}', function ($id) {
return "User ID: $id";
});
// URL: /users/42 → "User ID: 42"
// Optional parameter
Route::get('/posts/{slug?}', function ($slug = 'latest') {
return "Post: $slug";
});
// URL: /posts → "Post: latest"
// URL: /posts/my-article → "Post: my-article"
// Multiple parameters
Route::get('/users/{userId}/posts/{postId}', function ($userId, $postId) {
return "User $userId, Post $postId";
});
// Type constraint
Route::get('/users/{id}', function ($id) {
return $id;
})->where('id', '[0-9]+'); // Only numbers
?>Named Routes
PHP
<?php
// Name a route
Route::get('/dashboard', function () {
return view('dashboard');
})->name('dashboard');
Route::get('/users/{id}', function ($id) {
return view('user', ['id' => $id]);
})->name('user.show');
// Generate URL from named route
$url = route('dashboard'); // http://app.com/dashboard
$url = route('user.show', ['id' => 5]); // http://app.com/users/5
// Redirect to named route
return redirect()->route('dashboard');
?>Route Groups
PHP
<?php
// Group with prefix
Route::prefix('admin')->group(function () {
Route::get('/dashboard', fn() => 'Admin Dashboard');
Route::get('/users', fn() => 'Manage Users');
// URLs: /admin/dashboard, /admin/users
});
// Group with middleware
Route::middleware(['auth'])->group(function () {
Route::get('/profile', fn() => 'Profile');
Route::get('/settings', fn() => 'Settings');
});
// Group with prefix AND middleware
Route::prefix('admin')
->middleware(['auth', 'admin'])
->name('admin.')
->group(function () {
Route::get('/dashboard', fn() => 'Dashboard')->name('dashboard');
// URL: /admin/dashboard, Name: admin.dashboard
});
?>💡
Use named routes always! Instead of hardcoding URLs like
/users/5, use route('user.show', 5). When URLs change, named routes update automatically everywhere.Test your knowledge!
Take a quiz to reinforce what you learned.