Laravel 有时验证规则不起作用

Laravel sometimes validation rule not working

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

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

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

如果我将密码字段留空,那么它 returns 一个不应该出现的字符串或最小错误。

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

如有任何帮助,我们将不胜感激。

尝试在验证规则中添加 nullable

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

来自Laravel docs

nullable

The field under validation may be null. This is particularly useful when validating primitive such as strings and integers that can contain null values.

问题是,如果您将密码字段留空,它仍然会出现在请求中。但是充满了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();
}