php - 使用必填字段验证非必填关联数组
问题描述
我想验证如果我的请求包含关联数组类型的字段,则该数组需要包含特定字段(但前提是它存在)
即,数组,如果存在,需要包含 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' => 'sometimes', 'data.array.foo' => 'required_with:data.array']
)->errors()->all();
=> []
是否有任何非自定义验证器可以帮助我完成此任务?
解决方案
你也可以Rule::requiredIf
在 Laravel 5.6 及更高版本之后使用,试试这个:
$validator = Validator::make( $request->input(), [
// ...
'data.array.foo'=> Rule::requiredIf( function () use ($request){
return (bool) $request->input('data.array');
})
]);
推荐阅读
- android - 如何在退出 .aab 的某些资源发生更改后重建 .aab 文件
- ios - UIView 没有出现
- pandas - 熊猫毫秒和分钟频率别名“L”和“T”背后的基本原理
- angular - 使用 ngx-translate 翻译 Angular
- sql - 使用 1000 多个条件运行 SQL 查询
- pyspark - 如何将 databricks delta Lake 格式与 Kedro 一起使用?
- typescript - 如何模拟获取响应对象
- python - Pandas:将日期和时间列作为一个日期时间列的 read_csv
- java - 在 micronaut 2.1.2 中获取 POJO 属性名称
- java - 如何在spring-boot项目中访问依赖资源属性