首页 > 解决方案 > Laravel 请求验证 required_if 有多个条件

问题描述

我想使用具有多个条件的 Laravel required_if 来实现验证。

我有一个对象数组,并且想要验证如果type=image并且对象的isUsed为 false,则需要该对象的属性。

return request()->validate([
    'sets.*.attribute' => 'required_if:type=image && sets.*.isUsed=false',
]);

我该如何存档?

标签: laravelvalidation

解决方案


您可以使用Rule

use Illuminate\Validation\Rule;

...

Rule::requiredIf(function () use ($request) {
        $sets = collect($request->input('sets', []));

        return $request->input('type') === 'image'
               && $sets->filter(fn($set) => $set['isUsed'])->isEmpty();
}),

假设$sets对应于下面的值并且isUsed必须false在每一个集合上。

$sets = collect([
    ['isUsed' => false],
    ['isUsed' => false],
    ['isUsed' => false],
]);

文档中的更多信息:https ://laravel.com/docs/8.x/validation#rule-required-if


请注意,我使用的是PHP7.4 中的短箭头语法, fn() => ...如果您使用的是较低的 PHP 版本,则必须使用标准匿名函数function () { ... }


推荐阅读