laravel中的多阵列验证

Nik*_*aut 7 php validation laravel laravel-5 laravel-validation

我有3种类型的数据要验证

  1. 组中的数据
  2. 单一数据
  3. 单个和组合数据

此验证适用于单个数据

$validator = Validator::make($request->all(), [
    'tests.*.finding' => 'required',//works for single test
]);
Run Code Online (Sandbox Code Playgroud)

上面的数据样本

["tests"=>
                [
                    0 => ["finding"=>""]
                ],
                [
                    1 => ["finding"=>""]
                ]
            ]
Run Code Online (Sandbox Code Playgroud)

此验证适用于组中的数据

$validator = Validator::make($request->all(), [
    'tests.*.*.finding' => 'required',//works for group
]);
Run Code Online (Sandbox Code Playgroud)

上面的数据样本

  ["tests"=>
                    [
                        "A" =>[
                            [
                                0 => ["finding"=>""]
                            ],
                            [
                                1 => ["finding"=>""]
                            ]
                        ],
                        "B" =>[
                            [
                                0 => ["finding"=>""]
                            ],
                            [
                                1 => ["finding"=>""]
                            ]
                        ]
                    ]
                ]
Run Code Online (Sandbox Code Playgroud)

如何验证组中的单个和数据组合

合并数据样本

 ["tests"=>
                    [
                        "A" =>[
                            [
                                0 => ["finding"=>""]
                            ],
                            [
                                1 => ["finding"=>""]
                            ]
                        ]
                    ],
                    [
                        0 => ["finding"=>""]
                    ],
                    [
                        1 => ["finding"=>""]
                    ]
                ]
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个问题,因为第一种情况总是会给第二种情况带来错误,反之亦然.

Nik*_*aut 5

这是解决方案,Laravel提供sometimes了管理元素存在的规则,然后才开始检查下一个规则.

所以最终验证规则是.

 $validator = Validator::make($request->all(), [
 'tests.*.*.finding' => 'sometimes|required',//works for group
 'tests.*.finding' => 'sometimes|required',//works for single test
 ]);
Run Code Online (Sandbox Code Playgroud)

Doc for this:https://laravel.com/docs/5.4/validation#conditional-adding-rules