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

$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'
]; 

Now, end_page needs to be greater than initial_page. How include this filter?

推荐答案

no built-in validation个字段可以让你比较像Laravel中那样的字段值,所以你需要实现custom validator,这将让你在需要的地方重用验证.幸运的是,Laravel编写了自定义验证器really easy.

从定义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);
    });
  }
}

Now you can use your brand new validation rule in your $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'
]; 

You'll find more info about creating custom validators here: http://laravel.com/docs/5.1/validation#custom-validation-rules. They are easy to define and can then be used everywhere you validate your data.

Laravel相关问答推荐

Laravel 10 - 没有 $append 属性的Eloquent 的热切加载

vagrant会损坏你的电脑. | macOS v12(蒙特雷)#13132

如何在自定义表单请求中获取错误验证数据

Laravel,没有shell 访问的转储自动加载

Laravel 控制器中一种特定方法的中间件

Laravel 没有定义

在 Laravel 中将 Public 添加到assets资源路径

如何利用 StorageFacade 的 Filesystem 类的 glob 方法?

Laravel 5.2 身份验证不起作用

laravel:Eloquent的例子将数据插入数据库

Laravel:验证 json 对象

Laravel 搜索关系

无法声明类 Controller,因为该名称已在使用中

assets资源不引用公用文件夹(Laravel)

如何在 laravel 用户删除中重置自动增量?

laravel如何访问具有表编号名称的列?

Laravel 手动登录功能

是否可以在 Laravel 的不同数据库中引用外键?

Laravel 5.2 验证错误未出现在Blade中

Laravel 5.3 - 用户Collection 的单一通知(关注者)