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

如何在Laminas API Tools GUI中添加带参数的自定义验证器

API Tools GUI添加带参数自定义验证器的解决方案

1. 完成验证器在GUI可用列表的展示配置

你已经在validators.factories中注册了工厂,还需补充两项配置:

  • 在validators配置节点下添加aliases子项,给自定义验证器绑定短别名,方便GUI识别调用
  • 在api-tools-content-validation配置节点下新增metadata子项,注册验证器的基础元信息(显示名称、是否支持参数配置等),完整配置示例如下:
return [
    'validators' => [
        'factories' => [
            \My\Validator\DoctrineConnected\ExistsValidator::class => \My\Validator\DoctrineConnected\Factory\ExistsValidatorFactory::class,
        ],
        'aliases' => [
            // 自定义别名,可根据需求修改
            'MyExistsValidator' => \My\Validator\DoctrineConnected\ExistsValidator::class,
        ],
    ],
    'api-tools-content-validation' => [
        'metadata' => [
            \My\Validator\DoctrineConnected\ExistsValidator::class => [
                // GUI中展示的验证器名称
                'label' => 'Doctrine实体存在性验证器',
            ],
        ],
    ],
    // 其他原有配置
];

配置完成后清空API Tools缓存,即可在GUI验证器列表中看到该选项。

2. 实现自定义参数的GUI配置功能

你当前看不到自定义参数有两个原因,分别修改即可:

2.1 修改自定义验证器类

  • 继承Laminas官方的Laminas\Validator\AbstractValidator基类,该基类已实现参数的读写逻辑,无需自行编写setter/getter
  • 在验证器类中声明允许配置的参数列表,示例代码如下:
<?php
namespace My\Validator\DoctrineConnected;

use Laminas\Validator\AbstractValidator;
use Doctrine\ORM\EntityManager;

class ExistsValidator extends AbstractValidator
{
    // 声明自定义错误消息的常量,可根据需求修改
    const NOT_EXISTS = 'entityNotExists';
    const TOO_SHORT = 'stringTooShort';
    const TOO_LONG = 'stringTooLong';

    // 错误消息模板
    protected $messageTemplates = [
        self::NOT_EXISTS => '对应实体不存在',
        self::TOO_SHORT => '输入长度不能小于%minlen%',
        self::TOO_LONG => '输入长度不能大于%maxlen%',
    ];

    // 声明支持的自定义参数,设置默认值
    protected $options = [
        'entity_class' => null,
        'check_field' => null,
        'minlen' => 0,
        'maxlen' => 0,
    ];

    protected $entityManager;

    // 重载构造方法,先调用父类构造方法加载参数
    public function __construct(EntityManager $entityManager, $options = null)
    {
        $this->entityManager = $entityManager;
        parent::__construct($options);
    }

    // 你的验证逻辑实现
    public function isValid($value)
    {
        // 可直接通过$this->options获取配置的参数,比如$this->options['minlen']
        // 编写对应校验逻辑即可
    }
}

2.2 修改工厂类

你当前的工厂方法没有把GUI传入的配置参数传递给验证器实例,修改__invoke方法即可:

public function __invoke(ContainerInterface $container, $requestedName, array $options = null) {
    // 注意你原代码中的EntityManager拼写错误,已修正
    $entityManager = $container->get('doctrine.entitymanager.orm_default');
    // 将参数传入验证器构造方法
    return new $requestedName($entityManager, $options);
}

2.3 补充参数元信息配置

在api-tools-content-validation.metadata中对应验证器的配置下,添加options子项,声明每个参数的GUI展示规则:

'api-tools-content-validation' => [
    'metadata' => [
        \My\Validator\DoctrineConnected\ExistsValidator::class => [
            'label' => 'Doctrine实体存在性验证器',
            'options' => [
                'entity_class' => [
                    'label' => '实体类完整命名空间',
                    'type' => 'text',
                    'required' => true,
                ],
                'check_field' => [
                    'label' => '校验字段名',
                    'type' => 'text',
                    'required' => true,
                ],
                'minlen' => [
                    'label' => '最小长度',
                    'type' => 'number',
                    'required' => false,
                ],
                'maxlen' => [
                    'label' => '最大长度',
                    'type' => 'number',
                    'required' => false,
                ],
            ],
        ],
    ],
],

配置完成后清空缓存,即可在GUI中看到和StringLength验证器一致的参数配置表单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:45:03