我想在多个条件下使用Laravel required_if来实现验证。
我有一个对象数组,想要验证如果对象的type=image和isUsed为false,则需要对象的属性。
return request()->validate([
'sets.*.attribute' => 'required_if:type=image && sets.*.isUsed=false',
]);
如何存档?
您可以使用Rule
use IlluminateValidationRule;
...
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-如果需要
注意,我使用的是PHP7.4 fn() => ...
中的短箭头语法。如果您使用的是较低的PHP版本,则必须使用标准匿名函数function () { ... }
我找到了一个可以应用于请求验证的解决方案,它与当前实现一起使用更简单。
return request()->validate([
'sets.*.attribute' => function ($attr, $value, $fail) {
if (request()->input('type') == 'image' && !request()->input('sets')[explode('.', $attr)[1]]['isUsed'] && empty($value)) {
$fail('The ' . $attr . ' is required.');
}
},
]);