如果存在数组,则需要 Laravel 验证数组元素
Posted
技术标签:
【中文标题】如果存在数组,则需要 Laravel 验证数组元素【英文标题】:Laravel validate array element is required if array is present 【发布时间】:2019-02-23 17:04:55 【问题描述】:Laravel 5.7。我有一个模型Foo
的表单请求验证。该模型有一个可选字段bar
,它必须是一个数组。如果存在,它必须包含两个键,bing
和 bang
。但是如果数组不存在,显然这两个键不应该被验证。
这是我目前所拥有的:
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 验证数组元素的主要内容,如果未能解决你的问题,请参考以下文章
Javascript ES6,如果存在则从数组中删除项目的最佳方法,如果不存在则添加