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

Laravel 5 在错误消息中返回自定义验证方法参数,laravel-5,laravel-5.1,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($attribut

我创建了一个自定义验证函数,并为其提供了一条自定义错误消息。如何在错误消息中显示值“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',
    ],
  ]

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

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

您必须定义自己的替换函数

让我们以Laravel内置的\Lightning\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的boot()方法中扩展验证器。(理想情况下,您可以创建自己的ValidationServiceProvider)

相应的语言行为:

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

你试过这个吗?我认为如果没有定义一个定制的替代品,这是行不通的。谢谢你的震惊!你能澄清一下我应该把这个方法放在哪里吗?你是说哪一个?boot()函数还是第一个?哦,没关系,你说要做一个服务提供商