国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

zentaoPHP框架中的數(shù)據(jù)驗證機制

2018-10-11 10:03 更新

數(shù)據(jù)驗證在web應(yīng)用中尤其顯得重要。下面來給大家介紹下禪道框架的數(shù)據(jù)驗證機制。

一、驗證規(guī)則放在什么地方?

mvc程序中,每一層都可以放驗證規(guī)則。比如很多的表單驗證,會自動根據(jù)用戶的輸入進行驗證,然后給予提示。那么數(shù)據(jù)驗證放在哪一層呢?這個問題網(wǎng)絡(luò)上大家有很多的爭議。有的人主要放在view這一層,有的則主張放在control層。zentaoPHP選擇了model層。

為什么這樣做呢?因為model層是底層,所有的數(shù)據(jù)操作,都要經(jīng)過model來進行處理。那么只要在這一關(guān)把數(shù)據(jù)驗證做好,就可以保證數(shù)據(jù)的準確和安全。當然,框架的用戶,可以同時在前端加上js的驗證,和model層的驗證不會沖突的。下面來看下如何使用禪道的數(shù)據(jù)過濾機制。

二、zentaoPHP框架驗證機制說明:

受php的filter機制啟發(fā),禪道的數(shù)據(jù)過濾分為兩個部分,一個是數(shù)據(jù)修正,一個是數(shù)據(jù)驗證。首先是要對從客戶端傳遞過來的數(shù)據(jù)進行修正,然后再對數(shù)據(jù)進行校驗。

驗證類是在lib/filter/filter.class.php里面定義的。

三、數(shù)據(jù)修正:

首先來看代碼:

$bug = fixer::input('post')
->add('openedBy', $this->app->user->account) 
->add('openedDate', $now) 
->setDefault('project,story,task', 0) 
->setDefault('openedBuild', '') 
->setIF($this->post->assignedTo != '', 'assignedDate', $now) 
->setIF($this->post->story != false, 'storyVersion', $this->loadModel('story')->getVersion($this->post->story))
->specialChars('title,steps,keyword') 
->cleanInt('product, module, severity') 
->join('openedBuild', ',') 
->remove('files, labels')
->get();

首先,是調(diào)用fixer這個類的input方法,它的參數(shù)post表示是從$_POST這個變量中獲取數(shù)據(jù)。
緊接著的兩行add(),是向數(shù)據(jù)中增加兩個變量。

然后后面的兩行setDefault則是表示,當這個變量沒有傳值的時候,設(shè)成默認的值。
接下來是兩行setIF。setIF共有三個參數(shù),第一個是判斷條件,后面兩個分別是key和value。也就是當條件為true的時候,設(shè)置$key = $value。
下面的spechialchars則表示對這三個字段進行htmlspecialchars處理;cleanInt則將變量處理成int類型,join,則將openedBuild使用,連接起來。
后,還需要把兩個不需要的變量去掉,使用remove。
通過get方法就可以得到一個已經(jīng)經(jīng)過修改的完整的數(shù)據(jù)集合。這個集合已經(jīng)可以準備入庫了。讓我們來看下數(shù)據(jù)是如何驗證的。

四、數(shù)據(jù)檢查

$this->dao->insert(TABLE_BUG)->data($bug)
->autoCheck()
->batchCheck('id, name', 'notempty')
->exec();
這句sql插入語句通過data方法,將修正過的數(shù)據(jù)傳遞給dao對象,然后通過autoCheck()對其進行自動檢查。autoCheck會根據(jù)數(shù)據(jù)庫里面字段的類型,長度進行判斷。如果類型不對,或者長度不對,會自動記錄錯誤。然后后面調(diào)用了batchCheck()方法,對一批字段進行非空的驗證。

當然也可以通過check()方法對單個字段進行驗證。驗證的規(guī)則有很多,比如notempty, unique, email, account等等。

五、獲得錯誤

如果數(shù)據(jù)驗證過程中沒有錯誤,則執(zhí)行了exec()方法,將數(shù)據(jù)插入數(shù)據(jù)庫。

如果有錯呢?exec()方法什么都不會執(zhí)行,但會記錄到錯誤日志中??梢栽赾ontrol中里面判斷是否有錯誤。

if(dao::isError()) die(js::error(dao::getError())); 

如果有錯誤,用js警告框的方式彈出,然后重置錯誤日志。

六、數(shù)據(jù)修正和數(shù)據(jù)檢查方法附錄

數(shù)據(jù)修正方法:

cleanEmail:    將目標字段處理為email
encodeURL:    將目標字段進行urlencode
cleanURL:     將目標字段中不符合url標準的字符去掉。
cleanFloat:   將目標字段處理為float類型。
cleanINT       將目標字段處理為int類型。
specialChars: 對目標字段使用htmlspecialchars處理。
stripTags:    去除目標字段中的標簽。
quote:        對目標字段做quote處理。
setDefault:   對目標字段設(shè)置默認值。如果用戶有傳值,使用用戶傳的值。
setIF:        當滿足某個條件的時候,對每個字段進行設(shè)置。
setForce:     強制覆蓋某個字段的值。
remove:       刪掉某一個字段。
removeIF:     滿足某個條件的時候刪除某一個字段。
add:          添加某一個字段。
addIF:        當滿足某個條件的時候,添加某一個字段。
join:         對目標字段使用逗號連接起來。
callFunc:      使用自定義函數(shù)對數(shù)據(jù)進行修正。

數(shù)據(jù)檢查方法:


bool:     目標字段必須是布爾型。
int:      目標字段必須是int類型。
float:    目標字段必須是float類型。
email:    目標字段必須是email類型。
url:      目標字段必須是url 類型。
ip:       目標字段必須是ip地址。有一個可選參數(shù):$range all|public|static|private
date:    目標字段必須是一個日期格式。
reg:      目標字段必須滿足正則表達式。
length:   長度要滿足指定的大小。
notEmpty: 目標字段不能為空。
empty:    目標字段必須為空。
account:  目標字段必須是一個合法的用戶名。
equal:    目標字段必須等于某一個值。
call:     調(diào)用用戶自己的檢查函數(shù)。 
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號