我的问题相当复杂,很难用文字解释,所以我会尽我所能。
我有三个输入,都是数组,' A' ' B' ' C&#39 ;.我还有一个复选框输入' D' (不是数组)。如果B或C中的相应元素非空,则必须要求A中的每个元素,但是,如果D的值为1,即使B或C中的相应元素不是,也不应该要求A -empty。如果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;
});
答案 0 :(得分:0)
定义您需要编写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之间相似。