我有点头疼,正在研究如何以一种不丑陋的方式做到这一点。
['input1'=>true, 'input2'=>false, 'input3'=> false] // valid
['input1'=>false, 'input2'=>false, 'input3'=> false] // not valid
['input1'=>null, 'input2'=>true, 'input3'=> false] // not valid
['input1'=>true, 'input2'=>true, 'input3'=> false] // not valid
这看起来真的很简单-仅当一个选项中的一个(正好一个)为true,而其他两个为false(不为null)时,输入才有效。
有人可以帮助我实现这一目标吗?
(Laravel 5.7 fyi)
答案 0 :(得分:1)
最终解决了它。
我需要在表单请求中覆盖getValidatorInstance方法:
/**
* Override the validator instance
*/
protected function getValidatorInstance()
{
return parent::getValidatorInstance()->after(function ($validator) {
$trueAttributes =
collect(request()->only('input1','input2','input3'))
->reject(function($attribute){
return ($attribute !== true);
});
if ($trueAttributes->count() !== 1) {
$validator->errors()->add('data', 'At least one attribute must be true');
}
});
}