Laravel有时验证规则不起作用

时间:2018-05-30 09:48:24

标签: laravel laravel-5 laravel-validation

我正在尝试将sometimes验证规则实施到我的一个项目中(Laravel 5.6)。

我有一个用户可以更新其名称和密码的个人资料页面,但我想这样做,如果用户没有输入密码,它不会更新该字段,这是我认为有时规则。

我在控制器中使用的完整更新方法如下。

如果我将密码字段留空,则会返回一个字符串或最小错误,但不应该这样做。

public function update()
{
    $user = Auth::user();

    $this->validate(request(), [
        'name' => 'required',
        'password' => 'sometimes|string|min:6'
    ]);

    $user->name = request('name');
    $user->password = bcrypt(request('password'));

    $user->save();

    return back();
}

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

尝试在验证规则中添加nullable

$this->validate(request(), [
    'name' => 'required',
    'password' => 'sometimes|nullable|string|min:6'
]);

来自Laravel docs

  

可空

     

验证字段可能为空。这特别有用   在验证原语时,如字符串和整数可以   包含空值。

答案 1 :(得分:0)

问题是如果您将密码字段留空,它仍然存在于请求中。但是填充了null

请改为尝试:

public function update()
{
    $user = Auth::user();

    $this->validate(request(), [
        'name' => 'required',
        'password' => 'nullable|string|min:6'
    ]);

    $user->name = request('name');

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

    $user->save();

    return back();
}