Laravel 5.8,应用自定义规则后验证失败

时间:2019-08-18 08:08:02

标签: laravel laravel-5 laravel-5.8 laravel-validation

这很好用。当传递空值时,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();

1 个答案:

答案 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,它也将针对空值运行。

source