You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8 如何为自定义Validation Rule注册字符串标识符

Laravel 8 自定义验证规则注册为字符串调用方法

完全可以实现,只需要在服务提供者中注册规则别名即可,操作步骤如下:

操作步骤

  1. 打开应用服务提供者文件 app/Providers/AppServiceProvider.php
  2. 在 boot() 方法中添加自定义规则注册逻辑,示例代码如下(以你创建的Euro规则为例):
<?php

namespace App\Providers;

use Illuminate\Support\Facades\Validator;
use App\Rules\Euro;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function register()
    {
        //
    }

    public function boot()
    {
        // 注册euro规则别名
        Validator::extend('euro', function ($attribute, $value, $parameters, $validator) {
            // 直接调用已创建的Rule类的校验逻辑
            return (new Euro)->passes($attribute, $value);
        });

        // 可选:复用Rule类中定义的错误提示
        Validator::replacer('euro', function ($message, $attribute, $rule, $parameters) {
            return str_replace(':attribute', $attribute, (new Euro)->message());
        });
    }
}
  1. 配置完成后即可直接使用字符串形式调用规则:
$rules = [
    'amount' => 'required|euro'
];

支持带参数的规则

如果你的自定义规则需要传参,比如要实现 euro:100 这种格式,只需要调整注册逻辑传入参数即可:

Validator::extend('euro', function ($attribute, $value, $parameters, $validator) {
    // parameters数组就是|分隔后的参数,这里将第一个参数传入Rule类
    return (new Euro($parameters[0] ?? null))->passes($attribute, $value);
});

注意事项

  • 规则别名建议统一使用小写,和Laravel内置规则命名风格保持一致,避免出现大小写匹配问题
  • 注册完成后全局生效,无需额外配置即可在所有验证场景使用字符串形式调用

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:12:03