首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有多个条件的Laravel请求验证required_if

具有多个条件的Laravel请求验证required_if
EN

Stack Overflow用户
提问于 2021-04-29 06:35:48
回答 2查看 690关注 0票数 2

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

我有一个对象数组,并希望验证如果对象的type=imageisUsed是假的,则需要该对象的属性。

代码语言:javascript
运行
复制
return request()->validate([
    'sets.*.attribute' => 'required_if:type=image && sets.*.isUsed=false',
]);

我怎样才能把它存档?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-29 07:32:35

我找到了一个可以应用于请求验证的解决方案,在当前的实现中使用它更简单。

代码语言:javascript
运行
复制
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.');
        }
    },
]);
票数 0
EN

Stack Overflow用户

发布于 2021-04-29 06:44:48

您可以使用Rule

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
$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 () { ... }

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67312146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档