Недавно я писал, что появились планы по созданию валидаторов Zend_Validate_Db_RecordExists и Zend_Validate_Db_NoRecordExists. Выкладываю на суд общественности валидаторы, которые сам использую для этих целей.
Использование
1 2 3 4 5 | //проверка логина на уникальность $uniqueValidator = new Serkys_Validate_DbNoRecordExists(new Users(), 'login'); //проверка логина на существование $existsValidator = new Serkys_Validate_DbRecordExists(new Users(), 'login'); |
Исходный код классов
Serkys_Validate_DbRecordExists:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?php require_once 'Zend/Validate/Abstract.php'; class Serkys_Validate_DbRecordExists extends Zend_Validate_Abstract { const NOT_EXISTS = 'notExists'; protected $_messageTemplates = array( self::NOT_EXISTS => "'%value%' is not exists" ); private $_table; private $_columnName; public function __construct(Zend_Db_Table_Abstract $table, $columnName) { $this->_table = $table; $this->_columnName = $columnName; } public function isValid($value) { $this->_setValue($value); $where = $this->_table->getAdapter()->quoteInto("{$this->_columnName} = ?", $value); $row = $this->_table->fetchRow($where); if ($row == null) { $this->_error(self::NOT_EXISTS); return false; } return true; } } |
Serkys_Validate_DbNoRecordExists:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?php require_once 'Zend/Validate/Abstract.php'; class Serkys_Validate_DbNoRecordExists extends Zend_Validate_Abstract { const EXISTS = 'exists'; protected $_messageTemplates = array( self::EXISTS => "'%value%' is exists" ); private $_table; private $_columnName; public function __construct(Zend_Db_Table_Abstract $table, $columnName) { $this->_table = $table; $this->_columnName = $columnName; } public function isValid($value) { $this->_setValue($value); $where = $this->_table->getAdapter()->quoteInto("{$this->_columnName} = ?", $value); $row = $this->_table->fetchRow($where); if ($row != null) { $this->_error(self::EXISTS); return false; } return true; } } |
Александр Махомет says:
Так как сообщение об ошибке одно, в $this->_error(self::EXISTS); можно опустить параметр.
И в целом, возможно разумно объединить эти два практических идентичных валидатора в один?
9 декабря 2008, 13:58Denis says:
На днях тоже написал валидатор на уникальность логина, применительно к регистрации. Потом подумал о валидаторе на существование, но не увидел практического применения.
9 декабря 2008, 23:51