我希望在多个条件下使用Laravel required_if实现验证。
我有一个对象数组,并希望验证如果对象的type=image和isUsed是假的,则需要该对象的属性。
return request()->validate([
'sets.*.attribute' => 'required_if:type=image && sets.*.isUsed=false',
]);
我怎样才能把它存档?
发布于 2021-04-29 07:32:35
我找到了一个可以应用于请求验证的解决方案,在当前的实现中使用它更简单。
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.');
}
},
]);
发布于 2021-04-29 06:44:48
您可以使用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
注意,我使用的是https://www.php.net/manual/en/functions.arrow.php fn() => ...
,如果您使用的是较低的PHP版本,则必须使用标准的匿名函数function () { ... }
https://stackoverflow.com/questions/67312146
复制相似问题