Laravel - 使用请求标头进行路由模型绑定

时间:2018-01-19 14:20:16

标签: laravel

我想知道是否可以执行与路由模型绑定类似的操作,但需要使用请求标头。我有一个查询我检查我的api端点,看起来像这样:

User::where('telephone', $request->header('x-user'))->firstOrFail();

是否有可能以某种方式避免在控制器中的每个方法中重复此查询,而是将其应用于路由,这样我就可以获得用户对象,就像在路径模型中绑定函数中的类型提示一样在api routes文件夹中的路由:

public function userTransactions(User $user)
{
    //
}

1 个答案:

答案 0 :(得分:0)

创建中间件并将其分配给所需的路由。

选项1

在你的中间件中:

$user = User::where('telephone', $request->header('x-user'))->firstOrFail();

request()->merge(['user_model' => $user]);

然后您可以在控制器的任何位置request()->get('user_model')

选项2

首先创建符合查询的全局范围类。在这里,您将获得标头值并在范围内使用它。

https://laravel.com/docs/5.5/eloquent#global-scopes

接下来在中间件中,使用addGlobalScope

将范围添加到模型中
User::addGlobalScope(new HeaderScope())

现在,对User的所有查询都会有一个带有标题值的where子句。

如果需要,您可以随后删除范围或忽略全局范围。