Zend_Validate_Db_NoRecordExists を使ってみた
前回の続き。
Zend_Filter_Input と組み合わせて使ってみた。
<?php $validations = array( 'name' => array( new Gene_Validate_NotEmpty(), new Zend_Validate_Regex('/^[0-9A-Za-z+\_]*$/ '), new Zend_Validate_Db_NoRecordExists('users', 'name', null, $adapter), 'messages' => array( 0 => $this->_translate->_('Please enter user name.'), 1 => $this->_translate->_('Invalid user name.'), 2 => $this->_translate->_('Name is already exists.') ) ), 'email' => array( new Gene_Validate_NotEmpty(), new Zend_Validate_EmailAddress(), new Zend_Validate_Db_NoRecordExists('users', 'email', null, $adapter), 'messages' => array( 0 => $this->_translate->_('Please enter email.'), 1 => $this->_translate->_('Email is invalid.'), 2 => $this->_translate->_('Email is already exists.') ) ), 'password' => array( new Gene_Validate_NotEmpty(), 'messages' => array( 0 => $this->_translate->_('Please enter password.') ) ), 'token' => array( new Zend_Validate_Identical($session), 'message' => array( 0 => $this->_translate->_('Token invalid.') ) ) ); $validator = new Zend_Filter_Input(null, $validations); $ret = $validator->setData($this->_getAllParams())->isValid();
とかして、データベースの users テーブルに name カラムと email カラムに登録しようとするデータがあったらエラーになる。
Zend_Validate_Db_NoRecordExists() の第 4 引数にはデータベースの接続アダプターを設定する。
何もしないとデフォルトで、 Zend_Db_Table_Abstract::getDefaultAdapter() が中で呼ばれる。
いちいちデータが存在するかの判定ロジックを書かなくて良いのが素敵。