ZenTaoPHP架構的資料驗證機制

來源:互聯網
上載者:User

項目中資料驗證在web應用中尤其顯得重要。下面來給大家介紹下ZenTaoPHP架構的資料驗證機制。

一、首先來確定一個問題,即驗證的規則放在什麼地方?

mvc程式中,每一層都可以放驗證規則。比如很多的表單驗證,會自動根據使用者的輸入進行驗證,然後給予提示。那麼資料驗證放在哪一層呢?這個問題網路上大家有很多的爭議。有的人主要放在view這一層,有的則主張放在control層。禪道架構選擇了model層。

為什麼這樣做呢?因為model層是最低的一層,所有的資料操作,都要經過model來進行處理。那麼只要在這一關把資料驗證做好,就可以保證資料的準確和安全。當然,架構的使用者,可以同時在前端加上js的驗證,和model層的驗證不會衝突的。下面來看下如何使用禪道的資料過濾機制。

禪道的資料過濾分為兩個部分,一個是資料修正,一個是資料驗證。這個是受php的filter擴充啟發,它裡面就是分為了這兩個部分。先來看資料修正的例子:

二、資料修正:

 

$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();

首先,是調用fixer這個類的input方法,它的參數post表示是從$_POST變數中擷取資料。

緊接著的兩行add(),是向資料中增加兩個變數。然後後面的兩行setDefault則是表示,當這個變數沒有傳值的時候,設成預設的值。

接下來是兩行setIF。setIF共有三個參數,第一個是判斷條件,後面兩個分別是key和value。也就是當條件為true的時候,設定$key = $value。

下面的spechialchars則表示對這三個欄位進行htmlspecialchars處理

最後,還需要把兩個不需要的變數去掉,使用remove。

通過get方法就可以得到一個已經經過修改的完整的資料集合。這個集合已經可以準備入庫了。讓我們來看下資料是如何驗證的。

三、資料檢查

這句sql插入語句通過data方法,將修正過的資料傳遞給dao對象,然後通過autoCheck()對其進行自動檢查。autoCheck會根據資料庫裡面欄位的類型,長度進行判斷。如果類型不對,或者長度不對,會自動記錄錯誤。然後後面調用了batchCheck()方法,對一批欄位進行非空的驗證。當然也可以通過check()方法對單個欄位進行驗證。

if(dao::isError()) die(js::error(dao::getError())); 對,就是這樣一句話,如果dao::isError(),則執行getError()方法,然後將其合并成js的字串,以警告框的形式彈出。執行了getError()之後,所有的錯誤被清空,這樣不會影響下次的執行。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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