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

时间:2018-04-24 17:23:13

标签: validation zend-framework3 zend-inputfilter

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

如果我使用ZF3 documentation中提供的代码,如下所示,'required' => true,参数将导致formElementErrors()助手呈现消息"Value is required and can't be empty"在表单验证中,如果输入为空。我想改变这个消息,但不知道在哪里改变它。我知道如果我在输入过滤器中定义验证器,我可以为我定义的验证器自定义消息。但如果我离开'validators' => [],,如ZF3示例所示,消息定义在哪里?

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,
            ],
        ],
    ],
];

1 个答案:

答案 0 :(得分:3)

Zend\InputFilter\Input方法的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验证器。