Laravel Validation - Точно один из трех должен быть правдой? - PullRequest
0 голосов
/ 01 декабря 2018

У меня немного кобыла, решающая, как сделать это недобрым способом.

['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 (не ноль).

Может ли кто-нибудь помочь мне сделать это?

(Laravel 5.7 fyi)

1 Ответ

0 голосов
/ 01 декабря 2018

Решено это в конце концов.

Мне нужно переопределить метод 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');
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...