在Eloquent Model Observer

时间:2016-11-15 15:00:57

标签: php laravel request observers

在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的情况下获取请求?

由于

3 个答案:

答案 0 :(得分:11)

Laravel 5.3 +

request()助手应该适合你:

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

您可以使用以下方式访问媒体资源:

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

流明5.3 +

Lumen中没有request()助手,因此您需要使用IoC容器。

app('Illuminate\Http\Request')

示例:

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

答案 1 :(得分:3)

您可以将request辅助功能用作:

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

答案 2 :(得分:1)

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

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