Laravel 5.7:如何在请求类中覆盖自定义验证规则错误消息
解决Laravel 5.7自定义Request中覆盖自定义规则错误消息的问题
嗨,我明白你的困扰了!你之前尝试用'input.CustomRule'来覆盖自定义规则的错误消息无效,是因为Laravel对于自定义规则对象,需要使用规则类的完整限定命名空间作为消息键的一部分,而不是简单的类名。
下面是两种可行的解决方法:
方法一:使用完整限定类名作为消息键
假设你的CustomRule类位于App\Rules命名空间下,只需要在messages()方法里把键改成'input.App\Rules\CustomRule'即可:
class CustomRequest extends FormRequest { public function rules() { return [ 'input' => [ 'required', new CustomRule ] ]; } public function messages() { return [ 'input.required' => 'We need to know this!', // 使用完整命名空间作为规则键 'input.App\Rules\CustomRule' => 'Custom error message' ]; } }
如果你的CustomRule在其他命名空间下(比如直接在App目录),就把键替换成对应的完整路径,比如'input.App\CustomRule'。
方法二:给自定义规则设置别名(可选)
如果你觉得完整命名空间太长,也可以在CustomRule类里添加一个name()方法,返回一个简短的规则别名,这样就能用别名作为消息键了:
首先修改CustomRule类:
namespace App\Rules; use Illuminate\Contracts\Validation\Rule; class CustomRule implements Rule { // ... 你的passes()方法实现 public function message() { return 'Default custom rule message'; } // 添加这个方法返回别名 public function name() { return 'custom_rule'; } }
然后在CustomRequest的messages()里就可以用别名了:
public function messages() { return [ 'input.required' => 'We need to know this!', 'input.custom_rule' => 'Custom error message' ]; }
第一种方法更直接,适合快速解决问题,第二种则让代码看起来更简洁,你可以根据自己的需求选择~
内容的提问来源于stack exchange,提问作者Steve




