如何使用Laravel验证确保至少一个部分的验证

时间:2017-08-04 09:54:10

标签: validation laravel-5

我有一个包含两个部分 A &的

A 有以下字段。    名称,结果

B 有以下字段。    NAME1,RESULT1

不,我想确保用户至少填写一个部分才能继续。

这就是我想要做的。

$this->validate($request, [
               'name' => 'required',
               'result' => 'required',
               'name1' => 'required',
               'result1' => 'required'
 ]);

这会验证两个部分字段,但我想至少验证一个部分。

2 个答案:

答案 0 :(得分:1)

您可以使用Required Without

根据documentation

$input = $request->all();


    if(array_key_exists('name', $input) && array_key_exists('name1', $input) ){
        echo "Either of the section is required";
    }

    if(array_key_exists('result', $input) && array_key_exists('result1', $input) ){
        Echo"Either of the section is required";
    }

    $rules = [
        'name' => 'required_without:name1,result1',
        'result' => 'required_without:name1,result1',
        'name1' => 'required_without:name,result',
        'result1' => 'required_without:name,result'
    ];



    //validating request agianst rules
    $validator = Validator::make($input, $rules);

    //if validation fails, will throw ValidationHttpException
    if($validator->fails()) {
        print_r($validator->errors());
    }else{
        echo "Validation passed";
    }

看看这对你有用!!如果没有,您可以随时使用custom validators

答案 1 :(得分:1)

一个选项可能是您可以检查某些输入是否为空,然后对每个检查进行验证,但这可能不是一个好方法。

您也可以尝试这种方式,这是一种更清洁的方式。

  $this->validate($request, [
                'name' => 'required_without:name1,result1',
                'result' => 'required_without:name1,result1',
                'name1' => 'required_without:name,result',
                'result1' => 'required_without:name,result'
             ]);