如果有多个条件,则需要进行Laravel请求验证



我想在多个条件下使用Laravel required_if来实现验证。

我有一个对象数组,想要验证如果对象的type=imageisUsed为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.');
        }
    },
]);

相关内容

  • 没有找到相关文章

最新更新