Laravel密码验证失败,最小长度为#34;如果是空的

时间:2017-05-09 14:51:45

标签: php laravel validation

我的验证规则如下所示:

$validator = Validator::make($request->all(), [
        'name'     => 'required|min:5|max:255',
        'email'    => [
            'required',
            'max:255',
            'email',
            Rule::unique('users')->ignore($id),
        ],
        'password' => 'min:6|confirmed',
    ], [
        'confirmed' => 'Hasło musi się zgadzać',
        'unique'    => 'Wpisz inny adres email, ten adres jest zajęty',
        'required'  => 'To pole jest wymagane.',
        'min'       => 'To pole musi mieć minimum :min znaków.',
    ]);

    if ($validator->fails()) {
        return redirect('/panel/users/'.$id.'/edit')
            ->withErrors($validator)
            ->withInput();
    }

当我在没有更改密码的情况下编辑用户时,验证器将失败,并且' min'规则。正如您所看到的,验证器不需要密码,为什么要验证?

4 个答案:

答案 0 :(得分:7)

使用可空的规则

'nullable|min:6|confirmed'

答案 1 :(得分:2)

你遇到了预期的行为。

<强>分钟:值

验证字段必须具有最小值。字符串,数字和文件的评估方式与大小规则相同。

根据docs

您可以使用sometimes规则

Validator::make($request->all(), [
    'password' => 'sometimes|min:6|confirmed',
]

答案 2 :(得分:1)

您可以在这种情况下使用sometimes

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

您可以详细了解sometimes here

  

在某些情况下,您可能希望对a执行验证检查   仅当输入数组中存在该字段时才输入字段。快点   完成此操作,将有时规则添加到规则列表中:

confirmed似乎也可能导致problem。所以尝试手动完成:

'password' => 'required|min:6',
'password_confirmation' => 'required|min:6|same:password',

答案 3 :(得分:1)

看起来像你想要的。

$validator->sometimes('password', 'min:6|confirmed', function ($input) {
    return (strlen($input->password) > 0);
});