我有些行为我无法解释。我正在进行一个相当大的重构,我遇到了一个在代码中存在了很长时间的问题,但它似乎在重构之前就可以工作了。
关于某些模型
static::addGlobalScope
request()->user()
. 它在回调中工作,没有问题,但是当移到回调之外时,它返回
null
.
工作示例:
protected static function boot()
{
parent::boot();
static::addGlobalScope('auth', function (Builder $builder) {
$user = request()->user();
if ($user) {
if ($user->role == 'consultant') {
$builder->where('user_id', $user->id);
} elseif ($user->role == 'approver') {
$builder->whereHas('contract', function ($query) use ($user) {
return $query->whereHas('approvers', function ($query) use ($user) {
return $query->where('user_id', $user->id);
});
});
}
}
});
}
$user
为空。
protected static function boot()
{
parent::boot();
$user = request()->user(); // Moved $user outside of the callback
static::addGlobalScope('auth', function (Builder $builder) use ($user) {
if ($user) {
if ($user->role == 'consultant') {
$builder->where('user_id', $user->id);
} elseif ($user->role == 'approver') {
$builder->whereHas('contract', function ($query) use ($user) {
return $query->whereHas('approvers', function ($query) use ($user) {
return $query->where('user_id', $user->id);
});
});
}
}
});
}
第二个例子取自重构之前的模型。
此方法用于多个模型,但从未出现任何问题。有人知道为什么吗
$用户
请求()->用户()
boot
方法?最重要的是,为什么它从来没有提出过问题?