这很好用。当传递空值时,nullable
标签会执行其工作,如果电子邮件为空,则忽略验证。
Validator::make($request->all(), [
'email' => 'nullable|unique:users,email|email|max:50',
])->validate();
下面的代码在传递空值时失败。 nullable
标记似乎无效,并且验证直接跳至email
标记,并通过验证失败
电子邮件必须是有效的电子邮件地址。
Validator::make($request->all(), [
'email' => [
'nullable',
'email',
'max:50',
Rule::unique('users', 'email')->ignore($request->userId),
],
])->validate();
答案 0 :(得分:0)
如果您指定多个验证器,则数据必须通过所有验证器,而不仅仅是一个。要解决此问题,您可以按照@mare96的建议使用sometimes
。
Validator::make($request->all(), [
'email' => [
'nullable',
'email',
'max:50',
'sometimes',
Rule::unique('users', 'email')->ignore($request->userId),
],
])->validate();
或者,您可以编写自己的规则作为自定义类。在这些情况下,您可以选择实施Illuminate\Contracts\Validation\Rule
以仅对非空值运行规则。
如果您实现Illuminate\Contracts\Validation\ImplicitRule
,它也将针对空值运行。