php擴充ZF——Validate擴充

來源:互聯網
上載者:User

之前寫了一片文章關於如何在ZF0.6版本下擴充ZF的。這篇應該說是類似的文章,但環境換成ZF1.0RC1版本了。

在開始ZF擴充之前,推薦先看看ZF手冊中的一些命令規範(ZF推薦使用),同時希望讀者對ZF有較好的理解。如果沒有,可以先上PHPCHIAN的ZF版本詳細瞭解,或者到phpeye尋找相關資料。

ZF的validator提供了強大的驗證功能,但在實際的操作中還是過於煩瑣。比如說驗證郵件,是用ZF的代碼如下

<?php

require_once 'Zend/Validate/EmailAddress.php';
$validator = new Zend_Validate_EmailAddress();
if ($validator->isValid($email)) {
// email appears to be valid
} else {
// email is invalid; print the reasons
foreach ($validator->getMessages() as $message) {
echo "$message\n";
}
}
?>

有沒有發現,還是很類似我們不使用ZF的驗證方式。只不過ZF幫我們把郵件驗證的細節封裝好了。那麼我們如何簡化成這樣效果呢?(下面是我擴充後的調用方式)

<?php
$validate = new Phpbean_Validate();
$validate -> set_breakOnFailure(false);
$validate -> add('email',new Zend_Validate_EmailAddress(),'郵件地址不正確!');
$validate -> add('username',new Zend_Validate_StringLength(3,15),'使用者名稱長度必須在3到15之間!\'%value%\'不滿足條件');
$validate -> add('password',new Zend_Validate_StringLength(6,20),'密碼長度必須在6到20之間!');
$validate -> add('password',new Phpbean_Validate_isEqual($_POST['repassword']),'兩次輸入密碼不匹配');
$authcode = new Phpbean_Img_Code();
$validate -> add('yanxue8_authcode',new Phpbean_Validate_isEqual($authcode->authcode($_POST['yanxue8_authcode_mdcode'],'DECODE')),'驗證碼不匹配!');
if( !$validate -> validator($_POST) ){
error_page('註冊失敗',$validate->getMessageText());
}
?>

用上面這種方式一方面代碼清晰,另一方面也有利同意的出錯處理。那麼如何做到這樣呢?
關鍵是Phpbean_Validate這個類。
其實實現起來很簡單,Phpbean_Validate::add()方法是把一條條的驗證規則加入進來。然後調用Phpbean_Validate::validator()來驗證就OK了。
具體實現步驟如下:
首先,在zend的同級目錄中增加一個phpbean檔案夾,然後在裡面增加一個Validator.php檔案。
然後,在validator.php檔案加入Phpbean_Validate這個類的定義。注意(你可以修改成自己的檔案名稱和路徑名,但注意一定要和類的名稱保持一致)。
這裡,我給出我的Phpbean_Validate類的實現過程,僅供參考。

<?
class Phpbean_Validate{

protected $_fileds =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->_fileds[] = array($key,$validate,$message,$breakOnFailure);
return $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;
}
continue;
}

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;
return true;
}
return 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;
}
}
?>

另外你還可以直接擴充一些驗證規則類。下篇我再詳細說。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.