Laravel路由通过Route门面定义,支持GET、POST等方法,可使用{参数}传递必选或可选参数,并可通过where方法约束参数格式,还可为路由命名以便生成URL,参数能自动传递给控制器方法。

在 Laravel 中,路由是应用的核心部分,负责将请求映射到对应的控制器或闭包函数。定义路由和传递参数非常灵活,下面详细介绍 Laravel 路由的定义方式以及参数传递的方法。
基本路由定义
Laravel 的路由文件位于 routes/web.php(用于 Web 请求)和 routes/api.php(用于 API 请求)。你可以使用 Route 门面来定义各种 HTTP 方法的路由。
-
GET 路由:
Route::get('/home', function () { return '首页'; }); -
POST 路由:
Route::post('/submit', function () { return '提交成功'; }); -
多方法路由:
Route::match(['get', 'post'], '/login', function () { ... }); -
任意方法路由:
Route::any('/any', function () { return '接收所有请求'; });
路由参数传递
在实际开发中,我们经常需要从 URL 中获取动态参数,比如用户 ID、文章 slug 等。Laravel 支持通过占位符的方式定义带参数的路由。
1. 必选参数
在路由 URI 中使用花括号 {参数名} 定义参数:
Route::get('/user/{id}', function ($id) {
return '用户ID:' . $id;
});
可以定义多个参数:
Route::get('/post/{year}/{month}', function ($year, $month) {
return "文章发布于:$year 年 $month 月";
});
2. 可选参数
在参数后加问号,并为回调函数参数设置默认值:
Route::get('/user/{name?}', function ($name = '游客') {
return '欢迎:' . $name;
});
3. 参数约束(正则验证)
使用 where 方法限制参数格式,例如只允许数字:
Route::get('/user/{id}', function ($id) {
return '用户ID:' . $id;
})->where('id', '[0-9]+');
多个参数分别约束:
Route::get('/user/{id}/role/{role}', function ($id, $role) {
return "用户 $id 的角色是 $role";
})->where(['id' => '[0-9]+', 'role' => '[a-zA-Z]+']);
Laravel 还提供了一些快捷约束方法,如:
-
->whereNumber('id'):只允许数字 -
->whereAlpha('name'):只允许字母 -
->whereAlphaNumeric('slug'):允许字母和数字
命名路由与参数生成 URL
给路由命名后,可以在生成链接时自动填充参数:
Route::get('/product/{id}', function ($id) {
// 处理逻辑
})->name('product.show');
在视图或代码中使用 route() 函数生成带参数的 URL:
route('product.show', ['id' => 123])
// 输出: /product/123
控制器路由传参
实际项目中,路由通常指向控制器方法。参数会自动传递给对应的方法:
Route::get('/article/{slug}', [ArticleController::class, 'show']);
控制器中接收参数:
class ArticleController extends Controller
{
public function show($slug)
{
$article = Article::where('slug', $slug)->first();
return view('article.show', compact('article'));
}
}
你也可以使用 Request 对象或其他类型提示,Laravel 会自动解析依赖。
基本上就这些。路由定义和参数传递是 Laravel 开发的基础,掌握好这些能让你更高效地构建应用。











