在 Eloquent 模型观察器中使用请求

Using Request within Eloquent Model Observer

在 Laravel 5.3 中,我们正在尝试创建一个表单,用户可以在其中更新他们的个人资料详细信息,包括新密码。

但是我们只想在提交密码后设置密码。

我们正在使用处理模型更新的 CRUD 框架,我们不想推出自己的 update(Request $request) 方法。

我们知道您可以注册类似于

的模型观察者
User::created(function(User $user){

});

我们希望实现类似于

的东西
User::created(function(User $user){

    if( $request->has('password') ){
        $user->password = bcrypt($request->input('password'));
    }

});

然而,当我们访问$request时,它完全是空的。例如,如果我们 dd($request->all()); 它是一个空数组,但是如果我们转储 dd($_POST); 我们会得到所有东西。

我认为这是因为加载顺序的原因,而请求系统尚未加载。

有没有一种方法我们可以在不直接访问 $_POST 的情况下获取请求?

谢谢

您可以将 request 辅助函数用作:

if( request()->has('password') ){
    $user->password = bcrypt(request()->get('password'));
}

Laravel 5.3+

request() 助手应该为您工作:

if (request()->has('password')) {
    $user->password = bcrypt(request()->password);
}

您可以通过以下方式访问 属性:

request()->password
request()->get('password')
request('password')

流明 5.3+

request() 助手在 Lumen 中不可用,因此您需要使用 IoC 容器。

app('Illuminate\Http\Request')

示例:

if (app('Illuminate\Http\Request')->has('password')) { $user->password = bcrypt(app('Illuminate\Http\Request')->password); }

作为其他两个答案的替代方法,您可以将请求传递给函数:

User::created(function(User $user) use ($request) {