Laravel验证-确实是三个必须之一吗?

时间:2018-12-01 17:27:41

标签: laravel validation

我有点头疼,正在研究如何以一种不丑陋的方式做到这一点。

['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)

1 个答案:

答案 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');
        }
    });
}