четверг, 31 марта 2011 г.

Zend_Validate_Db_RecordExists with doctrine

Validator Code:
<?php
class Validator_NoRecordExists extends Zend_Validate_Abstract
{
      private $_table;
      private $_field;

      const OK = '';

      protected $_messageTemplates = array(
          self::OK => "'%value%' allready in database"
      );

      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;
      }
}

Use like:
$this->addElement('text', 'username', array(
      'validators' => array(
            array(
                  'validator' => new Validator_NoRecordExists('User','username')
            )
      )
));

 

Комментариев нет:

Отправить комментарий