📅  最后修改于: 2023-12-03 15:28:14.634000             🧑  作者: Mango
在 Laravel 中,路由参数是您在 URL 中定义的占位符值。在应用程序中,您可以使用路由参数来捕获 URL 片段,从而使应用程序更灵活和可定制。Laravel 支持许多不同类型的路由参数,本文将介绍其中的一些。
最简单的路由参数类型是必需参数。它们是路由定义中的花括号包装的字母数字字符串(例如 {id}
)。当请求与包含必需参数的路由路径匹配时,Laravel 将提取该参数的值并将其传递给路由闭包或控制器方法。
例如,下面是一个定义必需参数的基本路由:
Route::get('user/{id}', function ($id) {
return 'User '.$id;
});
有时您可能希望将参数标记为可选,以便其存在性不影响路由匹配。这可以通过在参数名称后面加上问号来实现(如 {id?}
)。
在传递可选参数时,确保在调用方法之前将它们放在先。例如,如果定义了以下路由:
Route::get('user/{id?}', function ($id = null) {
return 'User '.$id;
});
以下 URL 将被匹配:
/user
/user/1
Laravel 还允许您通过正则表达式对参数进行约束。这是有用的,因为您可以确保参数值只接受某些字符或格式。
要对参数构造约束,请在其映射中附加 where
方法。例如,以下路由会将参数限制为数字:
Route::get('user/{id}', function ($id) {
//
})->where('id', '[0-9]+');
在本例中,where
方法接受参数名称和约束表达式。该表达式将参数限制为任何连续的数字序列。这意味着路由 {id}
仅匹配包含数字符号的字符串。
Laravel 还支持隐式绑定路由参数。它允许您自动从数据库中检索模型实例,并将其作为参数传递。
要实现隐式绑定,请在 RouteServiceProvider
类的 boot
方法中调用 route
方法:
public function boot()
{
parent::boot();
Route::bind('user', function ($value) {
return User::where('name', $value)->firstOrFail();
});
}
在本例中,bind
方法接受参数名称和闭包,该闭包将从数据库中检索模型实例。
现在,您可以在路由定义中使用模型实例:
Route::get('user/{user}', function (User $user) {
return $user;
});
以上介绍了 Laravel 支持的一些路由参数类型。这些类型包括必需参数、可选参数、正则表达式约束和隐式绑定。在实际开发中,根据需要选择路由参数类型可以使应用程序更灵活和定制化。