Laravel 验证,如果另一个字段为 0,则一个字段应为 1,反之亦然

rak*_*tha 1 laravel laravel-5

假设,我有一个发送的请求对象

[
 a => 0,
 b => 0
]
Run Code Online (Sandbox Code Playgroud)

我想要进行验证,这会导致错误,因为 a 和 b 都为 0。我需要至少有一个为 1。我该怎么做?另一个工作例如:

[
 a => 0,
 b => 1
]
Run Code Online (Sandbox Code Playgroud)

它应该通过

N69*_*69S 5

您可以针对这种特殊情况使用自定义规则。

$request->validate([
    'a' => [
        'integer',
        'between:0,1',
        function ($attribute, $value, $fail) use ($request) {
            if (!$value && !$request->b) {
                $fail($attribute.' is invalid.'); //you can customize the message here
            }
        }
    ],
    'b' => 'integer|between:0,1'
]);
Run Code Online (Sandbox Code Playgroud)

该规则只能针对一条,因此用户不会收到 2 条错误消息。