php擴(kuò)展Zend?Framework框架——Validate擴(kuò)展
之前寫了一片文章關(guān)于如何在Zend Framework框架0.6版本下擴(kuò)展Zend Framework框架的。這篇應(yīng)該說(shuō)是類似的文章,但環(huán)境換成Zend Framework框架1.0RC1版本了。
在開始Zend Framework框架擴(kuò)展之前,推薦先看看Zend Framework框架手冊(cè)中的一些命令規(guī)范(Zend Framework框架推薦使用),同時(shí)希望讀者對(duì)Zend Framework框架有較好的理解。如果沒(méi)有,可以先上PHPCHIAN的Zend Framework框架版本詳細(xì)了解,或者到phpeye查找相關(guān)資料。
Zend Framework框架的validator提供了強(qiáng)大的驗(yàn)證功能,但在實(shí)際的操作中還是過(guò)于煩瑣。比如說(shuō)驗(yàn)證郵件,是用Zend Framework框架的代碼如下
<?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";
}
}
?>
有沒(méi)有發(fā)現(xiàn),還是很類似我們不使用Zend Framework框架的驗(yàn)證方式。只不過(guò)Zend Framework框架幫我們把郵件驗(yàn)證的細(xì)節(jié)封裝好了。那么我們?nèi)绾魏?jiǎn)化成這樣效果呢?(下面是我擴(kuò)展后的調(diào)用方式)
<?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),'用戶名長(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)文章
php swoole多進(jìn)程/多線程用法示例【基于php7nts版】
這篇文章主要介紹了php swoole多進(jìn)程/多線程用法,結(jié)合實(shí)例形式分析了基于php7nts版使用swoole進(jìn)行多線程創(chuàng)建、調(diào)用相關(guān)操作技巧,需要的朋友可以參考下2019-08-08php跨域檢測(cè)類允許部分域名訪問(wèn)的示例詳解
PHP跨域檢測(cè)類是一種封裝了跨域檢測(cè)邏輯的PHP類,它可以用于在PHP應(yīng)用程序中檢測(cè)和處理跨域請(qǐng)求,以確保安全和正常的跨域通信,本文給出了示例給大家介紹php如何允許部分域名訪問(wèn),需要的朋友可以參考下2023-12-12PHP配合fiddler抓包抓取微信指數(shù)小程序數(shù)據(jù)的實(shí)現(xiàn)方法分析
這篇文章主要介紹了PHP配合fiddler抓包抓取微信指數(shù)小程序數(shù)據(jù)的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了PHP結(jié)合fiddler抓取微信指數(shù)小程序數(shù)據(jù)的相關(guān)原理與實(shí)現(xiàn)方法,需要的朋友可以參考下2020-01-01PHP常用字符串函數(shù)用法實(shí)例總結(jié)
這篇文章主要介紹了PHP常用字符串函數(shù)用法,結(jié)合實(shí)例形式總結(jié)分析了PHP常用字符串函數(shù)基本功能、用法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2020-06-06php使用str_shuffle()函數(shù)生成隨機(jī)字符串的方法分析
這篇文章主要介紹了php使用str_shuffle()函數(shù)生成隨機(jī)字符串的方法,結(jié)合兩個(gè)簡(jiǎn)單實(shí)例形式分析了基于str_shuffle()函數(shù)的隨機(jī)打亂字符串順序功能實(shí)現(xiàn)隨機(jī)字符串的相關(guān)操作技巧,需要的朋友可以參考下2017-02-02PHP數(shù)組在底層的實(shí)現(xiàn)原理詳解
這篇文章講給大家詳細(xì)介紹一下PHP數(shù)組在底層的實(shí)現(xiàn)原理,PHP數(shù)組在底層的實(shí)現(xiàn)原理可以分為兩種類型:基于哈希表的實(shí)現(xiàn)和基于有序列表的實(shí)現(xiàn),文中通過(guò)代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2023-11-11php進(jìn)行md5加密簡(jiǎn)單實(shí)例方法
在本文里小編給大家整理了一篇非常實(shí)用的php如何進(jìn)行md5加密知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以參考下。2019-09-09PHP number_format() 函數(shù)定義和用法
number_format() 函數(shù)通過(guò)千位分組來(lái)格式化數(shù)字2012-06-06