【问题标题】:How do I apply custom Validation on an array?如何在数组上应用自定义验证?
【发布时间】:2017-11-19 14:57:17
【问题描述】:

我的问题相当复杂,很难用文字来解释,所以我会尽力而为。

我有三个输入,都是数组,'A''B''C'。我还有一个复选框输入“D”(不是数组)。如果 B 或 C 中的相应元素非空,则必须要求 A 中的每个元素,但是,如果 D 的值为 1,则即使 B 或 C 中的相应元素非空,也不需要 A .如果 A[1] 为空,B[1] 为空但 C[1] 非空,我希望只需要 A[1],而不需要 A[0] 或 A[2]。

我创建了一些规​​则来尝试解决这个问题,但我不确定如何解决它。

$validator = Validator::make($output, [
]);

$validator->sometimes('A.*', 'required', function($input){
    if ($input->D==1){//if checkbox D is checked, don't make A required regardless of anything else
        return false;
    }
    if (($input->B!=null) || ($input->C!=null)){//Problem: instead of doing it for the individual elements 
    //it will make A required if any element of B or C is non-empty
        return true;
    }
    return false;
});

【问题讨论】:

    标签: php laravel validation laravel-5


    【解决方案1】:

    您肯定需要编写 custom.validation 规则。使用内置验证规则,您无法满足如此复杂的要求。如果您的要求只是需要 A 元素,如果 B,C 中的元素存在并且当复选框 D 不是 1 时,您可以使用 requireWithAll 规则。

    if(!$request->has('D') || $request->input('D') != 1){
            $rules = [
                'A.*' => 'required_with_all:B.*,C.*'
            ];
    
            $messages = [
                'A.*.*.required_with_all' => 'All A Elements are required if corresponding B and C elements present',
    
            ];
    
            $validator = Validator::make($request->all(),$rules,$messages);
            if($validator->fails()){
                $this->throwValidationException($request,$validator);
            }
        }
    

    只需将上述代码粘贴到您要进行验证的位置,这是满足您要求的简单方法,而不是编写复杂的自定义规则,但是请注意所有数组索引在 A、B、C 之间必须相似。

    【讨论】:

    • 很抱歉,我的验证非常糟糕。对于自定义验证,您能否提供一个模板,说明我将如何做这样的事情?
    • 所有对应的数组元素索引都相同吗?
    • 那如果A1和B1不为空而C1为空怎么办,是否要验证规则要求C1
    • 我已经更新了我上面的答案,尝试执行它并让我知道你的反馈,如果它的作品不要忘记点赞我的答案。
    猜你喜欢
    • 2015-08-03
    • 2016-11-28
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 2019-03-27
    相关资源
    最近更新 更多