如果存在数组,则需要 Laravel 验证数组元素

Posted

技术标签:

【中文标题】如果存在数组,则需要 Laravel 验证数组元素【英文标题】:Laravel validate array element is required if array is present 【发布时间】:2019-02-23 17:04:55 【问题描述】:

Laravel 5.7。我有一个模型Foo 的表单请求验证。该模型有一个可选字段bar,它必须是一个数组。如果存在,它必须包含两个键,bingbang。但是如果数组不存在,显然这两个键不应该被验证。

这是我目前所拥有的:

return [
    'bar'      => 'bail|array|size:2',
    'bar.bing' => 'required|numeric',
    'bar.bang' => 'required|numeric',
];

当我发送带有bar 数组的请求时,这有效。但是当我发送一个没有bar 数组的请求时,我仍然会收到验证错误

bar.bing 字段是必需的

bar.bang 字段是必需的

我怎样才能使它们仅在bar 存在时才需要?

【问题讨论】:

【参考方案1】:

试试这个规则

return [
    'bar'      => 'nullable|bail|array|size:2',
    'bar.bing' => 'required_with:bar|numeric',
    'bar.bang' => 'required_with:bar|numeric',
]

Docs for required_with

【讨论】:

谢谢,完美运行。我编辑了您的答案以添加指向文档的链接。【参考方案2】:

这是我在这种情况下倾向于做的事情

public function rules(): array

    $rules = [
        // ...
    ];

    if ($this->bar) 
        $rules['bar'] = 'array|size:2';
        $rules['bar.bing'] = 'required|numeric';
        $rules['bar.bang'] = 'required|numeric';
    

    return $rules;

【讨论】:

感谢您的回复。我考虑过这一点,但如果有更封装的方法,我会喜欢它。 您可以尝试条件sometimes 规则,但我从未尝试过使用数组键,也没有看到针对这种情况的任何封装方法。

以上是关于如果存在数组,则需要 Laravel 验证数组元素的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 填充数组元素的验证规则

Laravel验证数组中至少需要一个元素

Javascript ES6,如果存在则从数组中删除项目的最佳方法,如果不存在则添加

mongodb:如果元素不存在,则updateOne设置字符串数组,如果存在则保持不变

Laravel 验证 - 如何检查给定数组中是不是存在值?

“不存在”是不是有验证规则?