提问者:小点点

Laravel验证数组元素是必需的,如果数组存在


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

这是我到目前为止所拥有的:

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

当我发送一个带有条的请求时,这就起作用了。但是当我发送一个没有数组的请求时,我仍然会得到验证错误

bar.bing字段是必需的

bar.bang字段是必需的

如何仅在存在bar时使其成为必需的?


共2个答案

匿名用户

试试这个规则

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

required_with的文档

匿名用户

在这种情况下我倾向于这样做

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;
}