如果数组存在,则 Laravel 验证数组元素是否必填。

3

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时使它们成为必填项?

2个回答

6

尝试使用这些规则

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

有关required_with的文档



谢谢,非常完美。我编辑了你的答案并添加了文档链接。 - GluePear

0
这是我在这种情况下通常会做的事情。
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;
}

谢谢回复。我考虑过那个方法,但如果有更封装的方式就更好了。 - GluePear
你可以尝试使用条件“sometimes”规则,但我从未尝试过使用数组键,并且没有看到任何封装此类情况的方法。 - Sebastian Sulinski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接