ZF2 如何在必填字段为空时设置消息


ZF2 how to set message of required field when it's empty?

我有一个输入过滤器...

    $this->inputFilter->add($factory->createInput([
        'name' => 'reason',
        'required' => true,
        'filters' => [
            [
                'name' => 'StripTags'
            ]
        ],
        'validators' => [
            [
                'name' => 'StringLength',
                'options' => [
                    'min' => 10,
                    'max' => 150
                ]
            ]
        ]
    ]));

当长度为 0 时,"必需"错误开始(似乎使用 NotEmpty 验证器)。这给出了一个非常通用的消息"值是必需的,不能为空"。

由于我在表单上方的列表而不是在其输入旁边显示所有错误,因此这还不够具体。

我假设有一个像验证器数组一样的"消息"键,但我找不到任何关于它的文档。

如何为空输入设置消息?

我深入研究了 InputFactory 代码并发现了一些东西......

continue_if_empty将允许一个空字段,但仍运行验证器。

    $this->inputFilter->add($factory->createInput([
        'name'     => 'reason',
        'continue_if_empty' => true,
        'filters' => [
            [
                'name' => 'StripTags'
            ]
        ],
        'validators' => [
            [
                'name' => 'StringLength',
                'options' => [
                    'min' => 10,
                    'max' => 150,
                    'messages' => [
                        'Zend'Validator'StringLength::TOO_SHORT => 'The reason must be greater than %min% characters.',
                        'Zend'Validator'StringLength::TOO_LONG => 'The reason must be less than %max% characters.'
                    ]
                ]
            ]
        ]
    ]));

您还可以添加error_message配置。似乎无论发生什么,它都会始终显示此错误,而不会显示其他错误。这很好,因为唯一的验证器是StringLength。

    $this->inputFilter->add($factory->createInput([
        'name'     => 'reason',
        'error_message' => 'The reason must be between 10 and 150 characters in length.',
        'filters' => [
            [
                'name' => 'StripTags'
            ]
        ],
        'validators' => [
            [
                'name' => 'StringLength',
                'options' => [
                    'min' => 10,
                    'max' => 150,
                ]
            ]
        ]
    ]));

如果您仍然需要"非空"消息,您应该能够添加 NotEmpty 验证器,自定义其消息,并使用 continue_if_empty => true 配置。