代码之家  ›  专栏  ›  技术社区  ›  janoliver

Zend_Validate:Db_不存在于条令之中

  •  2
  • janoliver  · 技术社区  · 16 年前

    嘿,我正在用Zend_validate和Zend_form验证一个表单。

    我的元素:

    $this->addElement('text', 'username', array(
        'validators' => array(
            array(
                'validator' => 'Db_NoRecordExists',
                'options' => array('user','username')
                )
        )
    ));
    

    谢谢

    1 回复  |  直到 16 年前
        1
  •  9
  •   janoliver    16 年前

    用自己的验证器解决了这个问题:

    <?php
    
    class Validator_NoRecordExists extends Zend_Validate_Abstract
    {
        private $_table;
        private $_field;
    
        const OK = '';
    
        protected $_messageTemplates = array(
            self::OK => "'%value%' ist bereits in der Datenbank"
        );
    
        public function __construct($table, $field) {
            if(is_null(Doctrine::getTable($table)))
                return null;
    
            if(!Doctrine::getTable($table)->hasColumn($field))
                return null;
    
            $this->_table = Doctrine::getTable($table);
            $this->_field = $field;
        }
    
        public function isValid($value)
        {
            $this->_setValue($value);
    
            $funcName = 'findBy' . $this->_field;
    
            if(count($this->_table->$funcName($value))>0) {
                $this->_error();
                return false;
            }
    
            return true;
        }
    }
    

    这样使用:

    $this->addElement('text', 'username', array(
        'validators' => array(
            array(
                'validator' => new Validator_NoRecordExists('User','username')
                )
        )
    ));
    
    推荐文章