以前、ZF0.6バージョンでZFを拡張する方法について記事を書きました。こちらも同様の記事と言うべきですが、環境をZF1.0RC1版に変更しています。
ZF 拡張機能を開始する前に、ZF マニュアル (ZF が推奨する) のコマンド仕様を読むことをお勧めします。読者が ZF についてよりよく理解できることを願っています。そうでない場合は、まず PHPCHIAN の ZF バージョンにアクセスして詳細を確認するか、phpeye にアクセスして関連情報を見つけることができます。
ZFのバリデーターは強力な検証機能を提供しますが、実際の操作ではまだ煩雑です。たとえば、メールを検証するための ZF のコードは次のとおりです
require_once 'Zend/Validate/EmailAddress.php';
$validator = new Zend_Validate_EmailAddress(); $ email)) { // メールは有効であるようです
} else {
// メールが無効です; 理由を出力します
foreach ($validator->getMessages() as $message) {
echo "$messagen"; }
}
?>
これは、ZF を使用しない検証方法と非常に似ていることがわかりました。 ZF が電子メール検証の詳細をカプセル化するのに協力してくれたというだけです。では、この目的をどのように単純化すればよいでしょうか? (以下は私の拡張呼び出しメソッドです)
$validate = new Phpbean_Validate();
$validate -> set_breakOnFailure(false); (), 'メール アドレスが間違っています!);
$validate -> add('password',new Zend_Validate_StringLength(6,20),'パスワードの長さは 6 から 20 まででなければなりません!' ); ,new Phpbean_Validate_isEqual($_POST['repassword']),'入力された 2 つのパスワードが一致しません'); _isEqual($authcode- >authcode($_POST['yanxue8_authcode_mdcode'],'DECODE')) ,'検証コードが一致しません!')
());
}
一方では、コードが明確である一方で、エラー処理には有利です。では、どうやってこれを行うのでしょうか?
キーは Phpbean_Validate クラスです。
実際、Phpbean_Validate::add() メソッドは検証ルールを 1 つずつ追加するのが非常に簡単です。次に、Phpbean_Validate::validator() を呼び出して検証すれば問題ありません。
具体的な実装手順は次のとおりです:
まず、zend の同じレベルのディレクトリに phpbean フォルダーを追加し、その中に Validator.php ファイルを追加します。
次に、Phpbean_Validate クラスの定義を validator.php ファイルに追加します。注 (独自のファイル名とパス名に変更できますが、クラス名との一貫性を保つようにしてください)。
ここでは、参考のためにのみ、Phpbean_Validate クラスの実装プロセスを示します。
class Phpbean_Validate{
protected $_filds =array();
protected $_message = array();
protected $_breakOnFailure = true;
public function set_breakOnFailure($value){
$this->_breakOnFailure = $value;
}
public function add($key,$validate,$message='',$breakOnFailure=''){
if( empty($breakOnFailure) ) $breakOnFailure = $this->_breakOnFailure;
$this->_filds[] = array($key,$validate,$message,$breakOnFailure);
$this を返す;
}
public function validator($array = array()){
if(empty($array)) $array = $_POST; if(is_array($ this-> _fileds)){
foreach($ this-> _fileds as $ filed){
リスト($ key、$ validate、$ message、$ breakonfailure)= $ fuled;
if(empty($key)){
if(!$validate){
$this->_message[][] = $message;
if($breakOnFailure) break;
}
続けます。
}
if(!empty($message)) $validate->setMessage($message);
if( !$validate->isValid($array[$key]) ){
$this->message[$key][] = $validate->getMessages();
if($breakOnFailure) break;
}
}
if(!empty($this->_message))return false;
true を返します。
}
trueを返します。
}
public function getMessage(){
return $this->_message;
}
public function getMessageText(){
$str = '';
foreach ($this->_message as $ms){
foreach ($ms as $m) $str .= $m[0]."n";
}
return $str;
}
}
?>
さらに、これらのテストの種類を直接展開することもできます。次の記事で詳しくお話します。