如何解决使用必填字段验证非必填关联数组
我想验证是否我的请求包含关联数组类型的字段,该数组需要包含特定字段(但前提是它存在)
即,数组,如果存在,需要包含 foo:
{ data: {}}
和
{ data: { array: { foo: 1 } }
很好,但是
{ data: { array: {} }
和
{ data: { array: { bar: 1 } }
不是。
我写了这个验证器:
['data.array' => 'sometimes','data.array.foo' => 'required']
但它不接受第一种情况。
>>> \Illuminate\Support\Facades\Validator::make(
['data' => []],['data.array' => 'sometimes','data.array.foo' => 'required']
)->errors()->all();
=> [
"The data.array.foo field is required.",]
我想避免使用 'data.array.foo' => 'required_with:data.array'
(它也不适用于数组为空的情况)
>>> \Illuminate\Support\Facades\Validator::make(
['data' => ['array' => []]],'data.array.foo' => 'required_with:data.array']
)->errors()->all();
=> []
是否有任何非自定义验证器可以帮助我完成此任务?
解决方法
您也可以在 Laravel 5.6 及更高版本之后使用 Rule::requiredIf
,试试这个:
$validator = Validator::make( $request->input(),[
// ...
'data.array.foo'=> Rule::requiredIf( function () use ($request){
return (bool) $request->input('data.array');
})
]);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。