У меня есть два поля, а именно число и процент. Я хочу, чтобы пользователь вводил значение только в одном поле ввода. Если пользователь вводит значения как в поле с номером, так и в процентах, система должна сбросить ошибку проверки. Есть ли что-то, что мы можем сделать с проверкой 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