一尘不染

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

php

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

$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。如何包含此过滤器?


阅读 686

收藏
2020-05-29

共1个答案

一尘不染

没有内置的验证 ,它可以让你比较字段值一样,在 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中 使用全新的验证 规则

$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。它们易于定义,可在您验证数据的任何地方使用。

2020-05-29