Validation Laravel 5表单请求属性nice names不能与自定义验证器一起使用

Validation Laravel 5表单请求属性nice names不能与自定义验证器一起使用,validation,laravel,request,laravel-5,laravel-validation,Validation,Laravel,Request,Laravel 5,Laravel Validation,在我的一个表单请求中,我有以下更改验证消息输入字段名称的代码: public function attributes(){ return [ 'title' => 'topic title', 'content' => 'post content' ]; } 现在我想添加自定义验证规则,因此我创建了一个自定义验证服务: class Validation extends Validato

在我的一个表单请求中,我有以下更改验证消息输入字段名称的代码:

   public function attributes(){

        return [
            'title' => 'topic title',
            'content' => 'post content'
        ];

    }
现在我想添加自定义验证规则,因此我创建了一个自定义验证服务:

class Validation extends Validator{

    public function validateFoo($attribute, $value, $parameters){

        return $value == 'foo';

    }

}
然后,我创建了一个验证服务提供程序,并添加了以下启动方法:

public function boot(){

    Validator::resolver(function($translator, $data, $rules, $messages)
    {
        return new Validation($translator, $data, $rules, $messages);
    });

}
然后,我将其添加到app/config/app.php中的providers数组中:

  'App\Providers\ValidationServiceProvider',
现在所有这些都可以正常工作了,我可以像预期的那样在表单请求中使用我的自定义验证规则。问题是,我之前为属性设置的好名称会恢复为它们的旧名称,因此不会得到类似“post title字段是必需的”之类的内容。我得到的是“title字段是必需的”。如果我从providers数组中删除上述条目,那么我会得到预期的好名称,但是我不能使用我的自定义验证规则。我知道我可以在语言文件中全局查看这些,但我宁愿这样做。有办法解决这个问题吗?谢谢

更新

如果我只是将以下代码添加到AppServiceProvider类中,而不是执行上述操作,那么我将获得预期的属性名称,但我更喜欢第一种方法,因为它更干净:

public function boot()
{
    \Validator::extend('foo', function($attribute, $value, $parameters)
    {
        return $value == 'foo';
    });
}

如果您不想将resources/lang/en/validation.php文件用于此目的,可以将ValidationServiceProvider的引导函数更改为

    public function boot()
    {
        Validator::resolver(function($translator, $data, $rules, $messages, $attributes)
        {
            return new ValidatorExtended($translator, $data, $rules, $messages, $attributes);
        });
    }
请注意,我添加了额外的$attributes参数。然后,您可以像以前一样在FormRequest类中设置“nice”名称

   public function attributes(){

    return [
        'title' => 'topic title',
        'content' => 'post content'
    ];

   }

在哪里添加启动功能?我似乎无法使其工作。您可以将其添加到自定义验证服务提供程序中。您不再需要启动代码。它与attributes函数一起开箱即用。