laravel中的多阵列验证

时间:2017-03-17 14:13:11

标签: php laravel validation laravel-5 laravel-validation

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

  1. 组中的数据
  2. 单一数据
  3. 单个和组合数据
  4. 此验证适用于单个数据

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

    上面的数据样本

    ["tests"=>
                    [
                        0 => ["finding"=>""]
                    ],
                    [
                        1 => ["finding"=>""]
                    ]
                ]
    

    此验证适用于组

    中的数据
    $validator = Validator::make($request->all(), [
        'tests.*.*.finding' => 'required',//works for group
    ]);
    

    上面的数据样本

      ["tests"=>
                        [
                            "A" =>[
                                [
                                    0 => ["finding"=>""]
                                ],
                                [
                                    1 => ["finding"=>""]
                                ]
                            ],
                            "B" =>[
                                [
                                    0 => ["finding"=>""]
                                ],
                                [
                                    1 => ["finding"=>""]
                                ]
                            ]
                        ]
                    ]
    

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

    组合数据样本

     ["tests"=>
                        [
                            "A" =>[
                                [
                                    0 => ["finding"=>""]
                                ],
                                [
                                    1 => ["finding"=>""]
                                ]
                            ]
                        ],
                        [
                            0 => ["finding"=>""]
                        ],
                        [
                            1 => ["finding"=>""]
                        ]
                    ]
    

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

2 个答案:

答案 0 :(得分:5)

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

所以最终验证规则是。

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

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

答案 1 :(得分:2)

您可以按照代码修复验证数据。

$customFieldValidation = ["test_id" => 'required|numeric',
        "test_two.id" => 'required|numeric',        
        ]);     
  $this->setRules ( $customFieldValidation );  
  $customeAttributes = [
  "test_three.*.id" => 'Test Three ' // custom message
  ];
  $this->setCustomAttributes ($customeAttributes);
  $this->_validate ();

我希望它对你有所帮助。