【问题标题】:Laravel 5.8, validation fails on applying a custom ruleLaravel 5.8,应用自定义规则验证失败
【发布时间】:2019-12-23 20:22:56
【问题描述】:

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

【问题讨论】:

  • 您是否尝试过使用sometime 验证?你可以阅读here

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


【解决方案1】:

如果您指定多个验证器,则数据必须通过所有验证器,而不仅仅是一个。要解决此问题,您可以使用sometimes 作为@mare96 的建议。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-11
    • 2018-02-18
    • 1970-01-01
    • 2019-02-12
    • 2016-11-22
    • 2019-01-19
    • 2013-10-17
    • 2014-04-22
    相关资源
    最近更新 更多