在我的一个表单请求中,我有以下代码更改验证消息的输入字段的名称:
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',
现在所有这些都运行良好,我可以按预期在表单请求中使用我的自定义验证规则。问题是我为之前的属性设置的好名称会恢复到旧名称,因此不需要获得类似“帖子标题”字段的内容。'我得到了#title标题字段。'。如果我从providers数组中删除上面的条目,那么我会得到预期的好名字,但是我不能使用我的自定义验证规则。我知道我可以在语言文件中全局看到这些,但我宁愿这样做。有没有什么办法解决这一问题?谢谢!
更新
如果我只是将以下代码添加到AppServiceProvider类中,而不是执行上述操作,那么我会获得预期的属性名称,但我更喜欢以第一种方式执行此操作,因为它更干净:
public function boot()
{
\Validator::extend('foo', function($attribute, $value, $parameters)
{
return $value == 'foo';
});
}
答案 0 :(得分:5)
如果您不想为此目的使用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类中设置“漂亮”名称。
public function attributes(){
return [
'title' => 'topic title',
'content' => 'post content'
];
}