我创建了一个表单来将用户添加到数据库并使用户可以登录.
现在我有两个密码字段(第二个用于验证第一个).如何为zend_form添加验证器以进行此类验证?
这是我的两个密码字段的代码:
$password = new Zend_Form_Element_Password('password',array( 'validators'=> array( 'Alnum',array('StringLength',array(6,20)) ),'filters' => array('StringTrim'),'label' => 'Wachtwoord:' )); $password->addFilter(new Ivo_Filters_Sha1Filter()); $password2 = new Zend_Form_Element_Password('password','required' => true,'label' => 'Wachtwoord:' )); $password2->addFilter(new Ivo_Filters_Sha1Filter());
当我寻找相同的东西时,我发现这个非常好用于相同字段的通用验证器.我现在没有找到它所以我只是发布代码…
<?PHP class Zend_Validate_IdenticalField extends Zend_Validate_Abstract { const NOT_MATCH = 'notMatch'; const MISSING_FIELD_NAME = 'missingFieldName'; const INVALID_FIELD_NAME = 'invalidFieldName'; /** * @var array */ protected $_messageTemplates = array( self::MISSING_FIELD_NAME => 'DEVELOPMENT ERROR: Field name to match against was not provided.',self::INVALID_FIELD_NAME => 'DEVELOPMENT ERROR: The field "%fieldName%" was not provided to match against.',self::NOT_MATCH => 'Does not match %fieldTitle%.' ); /** * @var array */ protected $_messageVariables = array( 'fieldName' => '_fieldName','fieldTitle' => '_fieldTitle' ); /** * Name of the field as it appear in the $context array. * * @var string */ protected $_fieldName; /** * Title of the field to display in an error message. * * If evaluates to false then will be set to $this->_fieldName. * * @var string */ protected $_fieldTitle; /** * Sets validator options * * @param string $fieldName * @param string $fieldTitle * @return void */ public function __construct($fieldName,$fieldTitle = null) { $this->setFieldName($fieldName); $this->setFieldTitle($fieldTitle); } /** * Returns the field name. * * @return string */ public function getFieldName() { return $this->_fieldName; } /** * Sets the field name. * * @param string $fieldName * @return Zend_Validate_IdenticalField Provides a fluent interface */ public function setFieldName($fieldName) { $this->_fieldName = $fieldName; return $this; } /** * Returns the field title. * * @return integer */ public function getFieldTitle() { return $this->_fieldTitle; } /** * Sets the field title. * * @param string:null $fieldTitle * @return Zend_Validate_IdenticalField Provides a fluent interface */ public function setFieldTitle($fieldTitle = null) { $this->_fieldTitle = $fieldTitle ? $fieldTitle : $this->_fieldName; return $this; } /** * Defined by Zend_Validate_Interface * * Returns true if and only if a field name has been set,the field name is available in the * context,and the value of that field name matches the provided value. * * @param string $value * * @return boolean */ public function isValid($value,$context = null) { $this->_setValue($value); $field = $this->getFieldName(); if (empty($field)) { $this->_error(self::MISSING_FIELD_NAME); return false; } elseif (!isset($context[$field])) { $this->_error(self::INVALID_FIELD_NAME); return false; } elseif (is_array($context)) { if ($value == $context[$field]) { return true; } } elseif (is_string($context) && ($value == $context)) { return true; } $this->_error(self::NOT_MATCH); return false; } } ?>