Laravel 验证:保释规则不起作用

use*_*937 6 php validation laravel

根据Laravel 文档bail规则应该在第一次验证失败后停止运行验证规则。

我在App\Http\*命名空间外有一个文件,其中包含以下代码:

if(Validator::make($params, [
    'email' => 'bail|required|email|max:60|exists:customers,email',
    'password' => 'required|max:60|string',
    'password' => new CustomerCheckPassword($params['email']),
]) -> fails())
    throw new Exception('message here');

Run Code Online (Sandbox Code Playgroud)

像魅力一样工作,除了bail规则来自email属性不会在不$params['email']被包含时停止验证customers.email,并且继续password。您对这个问题有什么想法或优雅的解决方法吗?

Bri*_*son 8

在同一文档页面的不同部分(它不会直接链接到它),它解释说bail仅适用于当前属性。因此,例如,如果email缺少,它将不会在 之后检查任何内容required,但它password是一个新属性,因此它将正常验证它。

有时您可能希望在第一次验证失败后停止对属性运行验证规则。为此,请将保释规则分配给属性:

实现此目的的sometimes一种方法是使用该方法

Validator::make($params, [
    'email' => 'bail|required|email|max:60|exists:customers,email',
    'password' => 'required|max:60|string',
])->sometimes('password', new CustomerCheckPassword($params['email']), function ($input) {
    // Check input to decide if rule should execute
});
Run Code Online (Sandbox Code Playgroud)