You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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';
    }
}

然后在CustomRequestmessages()里就可以用别名了:

public function messages() {
    return [
        'input.required' => 'We need to know this!',
        'input.custom_rule' => 'Custom error message'
    ];
}

第一种方法更直接,适合快速解决问题,第二种则让代码看起来更简洁,你可以根据自己的需求选择~

内容的提问来源于stack exchange,提问作者Steve

火山引擎 最新活动