Проверка Laravel: требуется только одно поле и только одно поле

У меня есть два поля, а именно число и процент. Я хочу, чтобы пользователь вводил значение только в одном поле ввода. Если пользователь вводит значения как в поле с номером, так и в процентах, система должна сбросить ошибку проверки. Есть ли что-то, что мы можем сделать с проверкой laravel для достижения этого?

Благодарю.

Вы можете написать специальный валидатор для этого: http://laravel.com/docs/5.0/validation#custom-validation-rules

Это может выглядеть примерно так:

class CustomValidator extends Illuminate\Validation\Validator { public function validateEmpty($attribute, $value) { return ! $this->validateRequired($attribute, $value); } public function validateEmptyIf($attribute, $value, $parameters) { $key = $parameters[0]; if ($this->validateRequired($key, $this->getValue($key))) { return $this->validateEmpty($attribute, $value); } return true; } } 

Зарегистрируйте его у поставщика услуг:

 Validator::resolver(function($translator, $data, $rules, $messages, $attributes) { return new CustomValidator($translator, $data, $rules, $messages, $attributes); }); 

Используйте его (например, в запросе формы):

 class StoreSomethingRequest extends FormRequest { // ... public function rules() { return [ 'percentage' => 'empty_if:number', 'number' => 'empty_if:percentage', ]; } } 

Обновление Просто протестируйте его в Tinker:

 Validator::make(['foo' => 'foo', 'bar' => 'bar'], ['bar' => 'empty_if:foo'])->fails() => true Validator::make(['foo' => '', 'bar' => 'bar'], ['bar' => 'empty_if:foo'])->fails() => false Validator::make(['foo' => '', 'bar' => 'bar'], ['foo' => 'empty_if:bar'])->fails() => false