Zend框架自定义验证类错误消息

时间:2010-04-29 17:42:36

标签: php zend-framework forms

验证失败,但不会返回错误消息。

       $form->addElement('text', 'phone_number', array(
     'required' => true,
       'validators' => array(
         array('NotEmpty', true, array('messages' => 'Enter a valid Phone Number')),
           array('regex', false, array('pattern' => '/\([0-9]{3}\)\s[0-9]{3}-[0-9]{4}/',
              'messages' => 'Enter a valid Phone Number'
     )),
           'CheckPhoneNumber'),

       ),
   ));

自定义类:

class Custom_Validators_CheckPhoneNumber extends Zend_Validate_Abstract{
const IN_USE = 'inUse';

protected $_messageTemplates = array(
    self::IN_USE => "'%value%' is currently in use"
);

public function isValid($value)
{
    $this->_setValue($value);

        $user_check = Users::getActive(preg_replace("/[^0-9]/", "", $value));
        if($user_check->id){
            $this->_error(self::IN_USE);
            return false;
        }

  return true;
}

}

只是失败不会给出“IN_USE”错误。

3 个答案:

答案 0 :(得分:2)

是否只有phone_number元素不显示错误或是否有其他元素?

您是否使用disableLoadDefaultDecorators关闭默认装饰器?

如何在数组中提供自定义验证器:

$form->addElement(
    'text', 'phone_number', array(
        'required' => true,
        'validators' => array(
            array(
                'NotEmpty', true, array(
                    'messages' => 'Enter a valid Phone Number'
                )
            ),
            array(
                'regex', false, array(
                    'pattern' => '/\([0-9]{3}\)\s[0-9]{3}-[0-9]{4}/',
                    'messages' => 'Enter a valid Phone Number'
                )
            ),
            array(
                'CheckPhoneNumber'
            )
        )
    )
);

答案 1 :(得分:1)

您确定自定义验证器失败了吗? 尝试确保它在自定义验证器中实际失败。

如果没有,请检查是否为表单元素配置了正确的前缀路径

$form->addElementPrefixPath(
  'Custom_Validators',
  'Custom/Validators',
  'validate'
);

自定义验证器的代码似乎没问题。

答案 2 :(得分:1)

   $form->addElement('text', 'phone_number', array(
 'required' => true,
   'validators' => array(
     array('NotEmpty', true, array('messages' => 'Enter a valid Phone Number')),
       array('regex', false, array('pattern' => '/\([0-9]{3}\)\s[0-9]{3}-[0-9]{4}/',
          'messages'=>array(Zend_Validate_Regex::NOT_MATCH=>'%value% is not a valid phone')
 )),
       'CheckPhoneNumber'),

   ),
));