Проверка завершается неудачно, как и должно, но не возвращает сообщение об ошибке.
$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».
Это только элемент 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' ) ) ) );
Вы уверены, что он не работает в вашем обычном валидаторе? Попытайтесь убедиться, что он фактически не работает в пользовательском валидаторе.
Если нет, проверьте правильность пути префикса для элементов формы
$form->addElementPrefixPath( 'Custom_Validators', 'Custom/Validators', 'validate' );
Код для пользовательского валидатора, кажется, в порядке.
$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'), ), ));