Laravel:验证需要大于另一个的整数字段

2022-08-30 09:55:34

我有两个字段,仅当两个字段都不存在时才是可选的:

$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_pageinitial_page


答案 1

没有内置的验证可以让你像在Laravel中那样比较字段值,所以你需要实现一个自定义验证器,这样你就可以在需要时重用验证。幸运的是,Laravel使编写自定义验证器变得非常容易

从在 yor 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中使用全新的验证规则:

$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。它们易于定义,然后可以在验证数据的任何位置使用。


答案 2

这个问题是在2015年提出的,所以大多数答案在2019年也过时了。

我想给出答案,它使用laravel团队提供的功能,该功能包含在其新版本中,

因此,正如@Sarpadoruk从laravel 5.6开始,laravel在验证中添加了诸如,之类的功能,这意味着:gtgteltlte

  • gt- 大于
  • gte- 大于等于
  • lt- 小于
  • lte- 小于等于

因此,使用您可以检查您的end_page是否应大于您的initial_page并且您的任务现在变得非常容易:gt

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

推荐