Laravel: проверять целое поле, которое должно быть больше, чем другое

У меня есть два поля, которые являются необязательными, только если оба они отсутствуют:

$rules = [ 'initial_page' => 'required_with:end_page|integer|min:1|digits_between: 1,5', 'end_page' => 'required_with:initial_page|integer|min:2|digits_between:1,5' ]; 

Теперь end_page должна быть больше, чем initial_page . Как включить этот фильтр?

Нет встроенной проверки , которая позволила бы вам сравнивать значения полей, подобные этому в Laravel , поэтому вам нужно будет реализовать специальный валидатор , который позволит вам повторно использовать валидацию там, где это необходимо. К счастью, Laravel упрощает создание пользовательского валидатора.

Начните с определения нового валидатора в приложении AppServiceProvider :

 class AppServiceProvider extends ServiceProvider { public function boot() { Validator::extend('greater_than_field', function($attribute, $value, $parameters, $validator) { $min_field = $parameters[0]; $data = $validator->getData(); $min_value = $data[$min_field]; return $value > $min_value; }); Validator::replacer('greater_than_field', function($message, $attribute, $rule, $parameters) { return str_replace(':field', $parameters[0], $message); }); } } 

Теперь вы можете использовать свое новое правило проверки в своих правилах $ :

 $rules = [ 'initial_page' => 'required_with:end_page|integer|min:1|digits_between: 1,5', 'end_page' => 'required_with:initial_page|integer|greater_than_field:initial_page|digits_between:1,5' ]; 

Более подробную информацию о создании пользовательских валидаторов вы найдете здесь: http://laravel.com/docs/5.1/validation#custom-validation-rules . Их легко определить, и их можно использовать везде, где вы проверяете свои данные.

Для Laravel 5.4 это будет:

 $rules = ['end_page'=>'min:'.(int)$request->initial_page] 

Я думаю, вы можете попробовать что-то вроде этого,

 $init_page = Input::get('initial_page'); $rules = [ 'initial_page' => 'required_with:end_page|integer|min:1|digits_between: 1,5', 'end_page' => 'required_with:initial_page|integer|min:'. ($init_page+1) .'|digits_between:1,5' ];