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

原文由 Alexandre Thebaldi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 546
2 个回答

没有内置的验证 可以让你比较像 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 。它们很容易定义,然后可以在您验证数据的任何地方使用。

原文由 jedrzej.kurylo 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 gt = 大于 :value|field

使用 gte = 大于等于 :value|field

使用 lt = 小于 :value|field

使用 lte = 小于等于 :value|field

在你的情况下

gt:initial_page

结果将是

$rules = array(
      'initial_page' => 'required_with:end_page|numeric|min:1|digits_between: 1,5',
      'end_page' => 'required_with:initial_page|numeric|gt:initial_page|min:2|digits_between:1,5'
      );

原文由 Husam M Ekhrawesh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题