Laravel验证:如何在自定义验证中访问属性的规则

时间:2015-08-16 22:32:24

标签: php validation laravel laravel-5

在以下规则中,我有自定义验证customRule: *date*

$rules = [
  'my_date' => 'required|date_format: Y-m-d|customRule: someDate',
];

在我的自定义验证规则扩展程序中,我需要访问规则的date_format属性:

Validator::extend('customRule', function($attribute, $value, $parameters) {

   $format = $attribute->getRules()['date_format']; // I need something like this 

   return $format == 'Y-m-d';
});

如何在扩展验证器上获取某些属性的规则值?

1 个答案:

答案 0 :(得分:1)

您无法访问其他规则。验证器应该是独立的单元 - 它们应该使用的唯一数据是:

  • 正在验证的字段的值
  • 作为参数传递给此验证规则的值
  • 要验证的对象的其他属性的值

您需要的是一个自定义验证器,它将包装 date_format customRule 执行的操作:

Validator::extend('custom_date_format', function($attribute, $value, $parameters) {
  $format = $parameters[0];
  $someDate = $parameters[1];

  $validator = Validator::make(['value' => $value], ['value' => 'date_format:' . $format]);

  //validate dateformat
  if ($validator->fails()) {
    return false;
  }

  //validate custom rule using $format and $someDate and return true if passes
});

一旦你拥有它,你就可以这样使用它:

$rules = [
  'my_date' => 'required|custom_date_format:Y-m-d,someDate',
];