如何从Zend Framework 2中的Zend \ Validator \ Identical返回自定义'isEmpty'错误消息?

时间:2012-11-12 12:15:21

标签: php zend-framework2 zend-validate zend-inputfilter

  

可能重复:
  zendframework 2 inputfilter customize default error message

我正在尝试使用Zend \ InputFilter \ InputFilter来验证注册表单中的输入。我的代码如下:

  1. 在“电子邮件”字段中验证电子邮件地址;然后
  2. 检查'email_confirm'中的值是否与'email'中的值匹配。
  3. 除了用户将两个字段留空之外的所有情况下,此方法都适用。在该实例中,'email_confirm'的验证器返回错误Array ( [isEmpty] => Value is required and can't be empty )

    如何自定义此错误消息?我无法使用以下设置:

    'messages' => array(
        'isEmpty' => 'Message Here' 
    ),
    

    因为抛出一个异常说(非常正确)Zend \ Validator \ Identical没有'isEmpty'的消息模板。并且它没有收到我之前为“电子邮件”字段设置的消息,否则它将返回Array ( [isEmpty] => Please enter your email address )

    $this->add($inputFactory->createInput(array(
        'name' => 'email',
        'required' => true,
        'filters' => array(
            array('name' => 'StripTags'),
            array('name' => 'StringTrim'),
        ),
        'validators' => array(
            array(
              'name' =>'NotEmpty', 
                'options' => array(
                    'messages' => array(
                        'isEmpty' => 'Please enter your email address' 
                    ),
                ),
            ),
            array(
                'name' => 'StringLength',
                'options' => array(
                    'encoding' => 'UTF-8',
                    'max' => 200,
                    'messages' => array(
                        'stringLengthTooLong' => "Email addresses cannot be more than 200 characters"
                    ),
                ),
            ),
            array(
              'name' =>'EmailAddress', 
                'options' => array(
                    'useMxCheck'    => true,
                ),
            ),                
        ),
    ))); 
    
    $this->add($inputFactory->createInput(array(
        'name' => 'email_confirm',
        'required' => true,
        'filters' => array(
            array('name' => 'StripTags'),
            array('name' => 'StringTrim'),
        ),
        'validators' => array(
            array(
                'name' => 'Identical',                        
                'options' => array(
                    'token' => 'email',
                    'messages' => array(
                         'notSame' => "Your email addresses do not match, please try again",
                    ),
                ),
            ),               
        ),
    ))); 
    

    谢谢, 尼尔

1 个答案:

答案 0 :(得分:0)

你必须以这种方式使用Zend\Validator\NotEmpty::IS_EMPTY

array(
    'name' =>'NotEmpty', 
        'options' => array(
            'messages' => array(
                \Zend\Validator\NotEmpty::IS_EMPTY => 'Please enter your email address' 
        ),
    ),
),

您可以查看API了解更多信息。

修改

深入了解Zend \ Validator \ NotEmpty源代码我看到IS_EMPTY常量具有'isEmpty'值,因此无法解决您的问题。无论如何,你应该使用这些常量而不是直接值,以避免可能的更新问题。