我想验证如果我的请求包含关联数组类型的字段,该数组需要包含特定的字段(但仅当它存在时)
即,数组(如果存在)需要包含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'=
>>> \Illuminate\Support\Facades\Validator::make(
['data' => ['array' => []]],
['data.array' => 'sometimes', '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');
})
]);