Laravel有时验证规则不起作用

Laravel有时验证规则不起作用,laravel,laravel-5,laravel-validation,Laravel,Laravel 5,Laravel Validation,我试图在我的一个项目(Laravel 5.6)中实现有时验证规则 我有一个个人资料页面,用户可以更新他们的姓名和密码,但我想这样做,如果用户不输入密码,它就不会更新该字段,这就是我认为有时规则是什么 下面是我在控制器中使用的完整更新方法 如果我将password字段留空,那么它将返回一个不应该执行的字符串或min错误 public function update() { $user = Auth::user(); $this->validate(request(), [

我试图在我的一个项目(Laravel 5.6)中实现
有时
验证规则

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

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

如果我将password字段留空,那么它将返回一个不应该执行的字符串或min错误

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'
]);
发件人:

可空

验证中的字段可能为空。这尤其有用 验证基本体(如字符串和整数)时,可以 包含空值


尝试在验证规则中添加nullable

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

可空

验证中的字段可能为空。这尤其有用 验证基本体(如字符串和整数)时,可以 包含空值


问题是,如果您将password字段留空,它仍然存在于请求中。但是填充了
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();
}

问题是,如果您将password字段留空,它仍然存在于请求中。但是填充了
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();
}

奇怪的它适用于表单,但随后将密码设置为nothing,甚至不应触摸密码列。您可以查看文档以了解更多详细信息。奇怪的它适用于表单,但随后将密码设置为nothing,甚至不应触摸密码列。您可以查看文档以了解更多详细信息。如果不更新密码字段,则不应在请求中传递该字段。当您在请求中传递密码字段(即使是空字符串)时,验证规则将检查该字段是否为字符串以及长度是否至少为6个字符。让我直截了当地说:如果没有输入密码,名称是否仍应更新?@Sebastian yes,在编辑配置文件页面上,如果不更新密码字段,则不应在请求中传递密码字段。当您在请求中传递密码字段(即使是空字符串)时,验证规则将检查它是否为字符串以及长度是否至少为6个字符。让我直截了当地说:如果没有输入密码,名称是否仍应更新?@Sebastian yes,在编辑配置文件页面上,这很有意义,如果没有条件,它总是要更新密码。。。非常感谢。啊,这是有道理的,它总是要更新密码,如果没有条件。。。非常感谢。