返回错误消息中的自定义验证方法参数

时间:2015-11-27 07:53:18

标签: laravel-5 laravel-5.1

我创建了一个自定义验证函数以及一个自定义错误消息。如何在错误消息中显示值“1000”?

  // in my request file
  function rules() 
  {
    return [
        'my_field' => 'myValidator:1000',
    ];    
  }

  // in my custom validator file
  public function validateMyValidator($attribute, $value, $parameters)
  {
      return true;
  }

  // in resources/lang/eng/validation.php
  'custom' => [
    'my_field' => [
        'my_validator' => 'Value must be 1000',
    ],
  ]

2 个答案:

答案 0 :(得分:1)

您必须定义自己的替换功能。

让我们从Laravel内置的\ Illuminate \ Validation \ Validator中获取一个现有示例:

protected function replaceSame($message, $attribute, $rule, $parameters)
{
    return str_replace(':other', $this->getAttribute($parameters[0]), $message);
}

validation.php中的相应语言行是:

 'same' => 'The :attribute and :other must match.'

所以实际上你必须创建一个像:

这样的函数
function replace{$yourRuleName}($message, $attribute, $rule, $parameters) {
     return str_replace()... 
}

在验证语言文件中替换您自己的自定义参数。

使用Laravel 5.1的其他方法

这就是我如何做那种事情。它可能不是一个完美的验证规则,只是举一些例子。

public function boot()
{
    Validator::extend('olderThan', function($attribute, $value, $parameters ) {
        $minAge = ( ! empty($parameters)) ? (int) $parameters[0] : 13;

        try {
            return \Carbon\Carbon::now()->diff(new \Carbon\Carbon($value))->y >= $minAge;
        } catch(\Exception $e) {
            return false;
        }
    });

    Validator::replacer('olderThan', function ($message, $attribute, $rule, $parameters) {
        return str_replace(":value", $parameters[0], $message);
    });
}

您可以在ServiceProviders'中扩展Validator。 boot()方法。 (理想情况下,您将创建自己的ValidationServiceProvider)

相应的语言行为:

"older_than" => "Minimum age is :value years",

答案 1 :(得分:0)

您应该使用验证下的字段名称作为占位符。所以这应该是:

'my_validator' => 'Value must be :myValidator'