如何在 ZF3 中自定义表单验证消息

How to customize form validation messages in ZF3

如果我没有在我的输入过滤器中指定验证器,我在 ZF3 中的哪里自定义表单验证消息?

如果我使用 ZF3 documentation 中显示的代码,如下所示,'required' => true, 参数将导致 formElementErrors() 助手在表单中呈现消息 "Value is required and can't be empty"验证输入是否为空。我想更改该消息,但不知道在哪里更改。我知道如果我在输入过滤器中定义一个验证器,我可以在那里为我定义的验证器自定义消息。但是,如果我像 ZF3 示例中所示那样保留 'validators' => [],,那么消息定义在哪里?

return [
    'input_filter_specs' => [
        'foobar' => [
            [
                'name' => 'name',
                'required' => true,
                'filters' => [
                    [
                        'name' => 'Zend\Filter\StringTrim',
                        'options' => [],
                    ],
                ],
                'validators' => [],
                'description' => 'Hello to name',
                'allow_empty' => false,
                'continue_if_empty' => false,
            ],
        ],
    ],
];

Zend\InputFilter\Input class 中 prepareRequiredValidationFailureMessage 方法中 NotEmpty 验证器自动附加到元素的验证器链上,如果该元素是必需的并且如果还没有出现。这意味着,如果您在输入过滤器配置中附加 NotEmpty 验证器,您可以自己定义错误消息。标准消息在 NotEmpty 验证器中定义为 NotEmpty::IS_EMPTY 常量。

return [
    'input_filter_specs' => [
        'foobar' => [
            [
                'name' => 'name',
                'required' => true,
                'filters' => [
                    [
                        'name' => StringTrim::class,
                        'options' => [],
                    ],
                ],
                'validators' => [
                    [
                        'name' => NotEmpty::class,
                        'options' => [
                            'messages' => [
                                NotEmpty::IS_EMPTY => 'Your message here',
                            ],
                        ],
                    ],
                ],
                'allow_empty' => false,
                'continue_if_empty' => false,
            ],
        ],
    ],

];

NotEmpty 验证器的选项中,您可以定义要在失败时显示的消息。

另一种方式可能是 NotEmpty 验证器的翻译器。如果您为您的应用程序使用翻译,您可以为错误消息设置您自己的短语。在这种情况下,您不必在输入过滤器规范中提及 NotEmpty 验证器。