📜  路由参数类型 laravel - PHP (1)

📅  最后修改于: 2023-12-03 15:28:14.634000             🧑  作者: Mango

路由参数类型 Laravel

在 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 支持的一些路由参数类型。这些类型包括必需参数、可选参数、正则表达式约束和隐式绑定。在实际开发中,根据需要选择路由参数类型可以使应用程序更灵活和定制化。