验证失败,但不会返回错误消息。
$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”错误。
答案 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'),
),
));