php this validate,php扩展ZF——Validate扩展
php擴(kuò)展ZF——Validate擴(kuò)展
更新時(shí)間:2008年01月10日 20:27:49 ? 作者:
php擴(kuò)展ZF——Validate擴(kuò)展
之前寫(xiě)了一片文章關(guān)于如何在ZF0.6版本下擴(kuò)展ZF的。這篇應(yīng)該說(shuō)是類似的文章,但環(huán)境換成ZF1.0RC1版本了。
在開(kāi)始ZF擴(kuò)展之前,推薦先看看ZF手冊(cè)中的一些命令規(guī)范(ZF推薦使用),同時(shí)希望讀者對(duì)ZF有較好的理解。如果沒(méi)有,可以先上PHPCHIAN的ZF版本詳細(xì)了解,或者到phpeye查找相關(guān)資料。
ZF的validator提供了強(qiáng)大的驗(yàn)證功能,但在實(shí)際的操作中還是過(guò)于煩瑣。比如說(shuō)驗(yàn)證郵件,是用ZF的代碼如下
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";
}
}
?>
有沒(méi)有發(fā)現(xiàn),還是很類似我們不使用ZF的驗(yàn)證方式。只不過(guò)ZF幫我們把郵件驗(yàn)證的細(xì)節(jié)封裝好了。那么我們?nèi)绾魏?jiǎn)化成這樣效果呢?(下面是我擴(kuò)展后的調(diào)用方式)
$validate?=?new?Phpbean_Validate();
$validate?->?set_breakOnFailure(false);
$validate?->?add('email',new?Zend_Validate_EmailAddress(),'郵件地址不正確!');
$validate?->?add('username',new?Zend_Validate_StringLength(3,15),'用戶名長(zhǎng)度必須在3到15之間!\'%value%\'不滿足條件');
$validate?->?add('password',new?Zend_Validate_StringLength(6,20),'密碼長(zhǎng)度必須在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')),'驗(yàn)證碼不匹配!');
if(?!$validate?->?validator($_POST)?){
error_page('注冊(cè)失敗',$validate->getMessageText());
}
?>
用上面這種方式一方面代碼清晰,另一方面也有利同意的出錯(cuò)處理。那么如何做到這樣呢?
關(guān)鍵是Phpbean_Validate這個(gè)類。
其實(shí)實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,Phpbean_Validate::add()方法是把一條條的驗(yàn)證規(guī)則加入進(jìn)來(lái)。然后調(diào)用Phpbean_Validate::validator()來(lái)驗(yàn)證就OK了。
具體實(shí)現(xiàn)步驟如下:
首先,在zend的同級(jí)目錄中增加一個(gè)phpbean文件夾,然后在里面增加一個(gè)Validator.php文件。
然后,在validator.php文件加入Phpbean_Validate這個(gè)類的定義。注意(你可以修改成自己的文件名和路徑名,但注意一定要和類的名稱保持一致)。
這里,我給出我的Phpbean_Validate類的實(shí)現(xiàn)過(guò)程,僅供參考。
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;
}
}
?>
另外你還可以直接擴(kuò)展一些驗(yàn)證規(guī)則類。下篇我再詳細(xì)說(shuō)。
相關(guān)文章
本文給大家分享的是個(gè)人對(duì)于PHP編碼轉(zhuǎn)換問(wèn)題的理解以及處理方法,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-07-07
最近做一個(gè)網(wǎng)頁(yè)小偷程序的時(shí)候才發(fā)現(xiàn)file_get_content已經(jīng)完全不能滿足需求了。我覺(jué)得,在讀取遠(yuǎn)程內(nèi)容的時(shí)候,file_get_content除了使用比curl便捷以外,其他都沒(méi)有curl好2014-05-05
這篇文章主要介紹了PHP過(guò)濾黑名單關(guān)鍵字的方法,通過(guò)保存過(guò)濾關(guān)鍵字到txt文件,再讀取txt文件內(nèi)容進(jìn)行正則匹配替換來(lái)實(shí)現(xiàn)過(guò)濾功能,需要的朋友可以參考下2014-12-12
今天小編就為大家分享一篇關(guān)于在PHP中輸出JS語(yǔ)句以及亂碼問(wèn)題的解決方案,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02
以下是對(duì)php中的strrpos函數(shù)與strripos函數(shù)的用法進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下2013-08-08
這篇文章主要為大家詳細(xì)
介紹了php圖像驗(yàn)證碼的生成代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
ExtJS與PHP、MySQL實(shí)現(xiàn)存儲(chǔ)的方法,需要的朋友可以參考下,里面有詳細(xì)的步驟。2010-04-04
array_splice() 函數(shù)與 array_slice() 函數(shù)類似,選擇數(shù)組中的一系列元素,但不返回,而是刪除它們并用其它值代替2011-11-11
今天想提一下如何配置PHPMyAdmin,因?yàn)樵陂_(kāi)發(fā)者,是比較普遍用到的。2009-05-05
這篇文章主要介紹了PHP程序設(shè)計(jì)中的MVC編程思想,對(duì)于深入理解MVC程序設(shè)計(jì)思想有一定的幫助,需要的朋友可以參考下2014-07-07
最新評(píng)論
總結(jié)
以上是生活随笔為你收集整理的php this validate,php扩展ZF——Validate扩展的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux火狐自动更新,CentOS 7
- 下一篇: php接口返回一个数组怎末写_php a