【问题标题】:Using Request within Eloquent Model Observer在 Eloquent 模型观察者中使用请求
【发布时间】:2017-11-23 23:27:09
【问题描述】:

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

谢谢

【问题讨论】:

  • 这是什么意思?,laravel 使用 bcrypt 开箱即用地散列密码。
  • 再读一遍这个问题,这可能是有道理的,似乎其他人都明白了:D

标签: php laravel request observers


【解决方案1】:

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); }

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-11
        • 2016-02-20
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多