php拡張ZF―Validate拡張
3856 ワード
以前はZF 0.6バージョンでZFを拡張する方法について記事を書きました。これは似たような文章というべきですが、環境はZF 1.0RC 1バージョンに変わりました。 ZFの拡大を始める前に、ZFマニュアルの中のいくつかの命令仕様(ZFの推奨使用)を見てから、読者がZFに対してより良い理解を持っていることをお勧めします。もしないなら、先にPHPCHIANのZFバージョンに行って詳しく調べたり、phpeyeに行って関連資料を調べたりします。 ZFのvalidatorは強力な検証機能を提供していますが、実際の操作ではやはり煩雑です。例えば検証メールは、ZFのコードで次のようになります。php require_オンス 'Zend/Validate/Email Address.php'; $validator = new Zend_Validate_Email Address() if ($validator->isValid($email) { // email appars ト be valid } else { // email is invalid; print the リリース foreach ($validator->get Messages() as $メッセージ { echo "$メッセージ } } ?> 発見されましたか?それとも似ていますか?私達はZFの検証方式を使いません。ただZFはメール検証の詳細を包装してくれました。私たちはどうやってこのような効果を簡略化しますか?以下は私が拡張した後の呼び出し方式です。php $validate = new Ppbean_Validate(); $validate -> setbreak OnFailure(false); $validate -> add('email',new Zend_Validate_メールアドレスが間違っています。 $validate -> add('username',new Zend_Validate_SteringLength(3,15)、'ユーザ名の長さは3から15の間でなければなりません!\'%value%\'は条件を満たしていません。 $validate -> add('password',new Zend_Validate_StringLength(6,20)、'パスワードの長さは6から20の間でなければなりません!' $validate -> add('password',new Ppbean_Validate_isEqual($u)POST['repassword]),'2回の入力パスワードが一致しません。 $authcode = new Ppbean_Img_コード $validate -> add('yanxue 8_authcode'new Ppbean_Validate_isequal($authcode->>authcode($u)POST['yanxue 8_auth code_mdcode','DECODE'),'検証コードが一致していません!' if( !$validate -> validator($u)POST) ){ error_page('登録失敗'、validate->get Message Text(); } ?> 上のような方式でコードがはっきりしている一方、有利に同意したエラー処理もします。どうやってこうすればいいですか? キーはPPPubeanですValidateというクラスです。 実现するのは简単です。Validate:add()方法は一つの条の検証規則を加入することです。その後、Pubean_を呼び出しますValidate:validator()を検証すればいいです。 具体的な実施手順は以下の通りである。 まず、zendの同級ディレクトリにphpbeanフォルダを追加して、中にValidator.phpファイルを追加します。 その後、validator.phpファイルにPhop bean_を追加します。Validateという類の定義。注意(自分のファイル名とパス名に変更できますが、クラス名と一致するように注意してください)。 ここでPhopean_を提供します。Validate類の実現過程は、ご参考までに。 クラス Ppbean_Validate{ protected $_fileds =array(); protected $_メッセージ = array(); protected $_break OnFailure = true; public 機能 setbreak OnFailure($value){ $this->_break OnFailure = $value; } public 機能 add($key、$validate、$message='、$break OnFailure='){ if( empty($break OnFailure) ) $break OnFailure = $this->_break OnFailure $this->_fileds[] = ray($key、$validate、$message、$break OnFailure); return $this } public 機能 validator($array) = array(){ if(empty($array) $array = $_POST; if (is_array($this->_fileds) { foreach ($this->_fileds as $filed){ list($key、$validate、$message、$break OnFailure) = $filed if(empty($key){ if(validate){ $this->_メッセージ[][] = $メッセージ if($break OnFailure) break; } contine; } if(empty($message) $validate->set Message($message); if( !$validate->isValid($array[$key]) ){ $this->_メッセージ[$key][] = $validate->getMessages() if($break OnFailure) break; } } if(empty($this->_メッセージ false; return true; } return true; } public 機能 get Message(){ return $this->_メッセージ } public 機能 get Message Text(){ $str = ''; foreach ($this->_メッセージ as $ms){ foreach ($ms as $m) $str .= $m[0].“” } return $str } } ?> また、直接的にいくつかの検証ルールクラスを広げることもできます。下編はもう少し詳しく話します。