2017-05-09 108 views
1

我的验证规则是这样的:Laravel密码验证失败的“最小长度”如果空

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

当我编辑用户没有修改密码,验证失败,“分”的规则。正如你可以看到我的验证器不需要密码,所以它为什么验证?

回答

1

它看起来像你想要什么。

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

要跨预期的行为来。

分钟:值

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

具体根据docs

可以使用sometimes规则

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

好,不过如果我想查这个,只有当用户输入新密码? – kuchar

+0

您可以在值前使用'有时'作为规则。 – Ian

+1

我有时作为规则添加并仍然验证最小长度。 ''''password'=>'有时|分:6 |确认',' – kuchar

0

您可以使用sometimes这种情况:

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

你可以阅读更多关于sometimeshere

在某些情况下,你可能希望运行验证检查如果该字段存在于输入数组中,则该字段仅为 字段。要快速 做到这一点,添加有时裁定您的规则列表:

confirmed好像它也可能导致problem。因此,尝试做手工:

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

我有时作为规则添加并仍然验证最小长度。 ''''密码'=>'有时|分:6 |确认''' – kuchar

+0

我认为这是确认。我编辑了我的帖子。 –

+0

仍然无法正常工作:(即使我没有输入任何内容,它仍然会提醒我密码的最小长度。 – kuchar

0

使用可空规则

'nullable|min:6|confirmed'