Привет, я пытаюсь проверить форму с Zend_Validate и Zend_Form.
Моя стихия:
$this->addElement('text', 'username', array( 'validators' => array( array( 'validator' => 'Db_NoRecordExists', 'options' => array('user','username') ) ) ));
Поскольку я использую Doctrine для обработки моей базы данных, Zend_Validate пропускает DbAdapter. Я могу передать адаптер в параметрах, но как мне объединить Zend_Db_Adapter_Abstract и Doctrine?
Может быть, есть более простой способ сделать это?
Благодаря!
Решил его собственным валидатором:
<?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') ) ) ));