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