

- 1. 框架介紹
- 1.1 關于zentaoPHP框架
- 1.2 zentaophp框架的主要功能
- 1.3 zentaophp框架授權協議
- 2. 安裝框架
- 2.1 zentaoPHP框架系統要求
- 2.2 zentaoPHP框架安裝
- 3. 快速入門
- 3.1 简单的Hello world!
- 3.2 使用MVC实现的hello world!
- 3.3 部署框架自帶的簡單的blog示例
- 4. 框架基礎
- 4.1 zentaoPHP框架裏面的基本概念
- 4.2 zentaoPHP框架的兩種請求方式
- 4.3 如何生成鏈接
- 4.4 框架里面提供的html, js和css类
- 5. 深入框架
- 5.1 zentaoPHP目錄结构
- 5.2 zentaoPHP框架提供的DAO功能
- 5.3 zentaoPHP框架的分頁解決方案
- 5.4 zentaoPHP框架中的數據驗證機制
zentaoPHP框架中的數據驗證機制 分享鏈接 /book/zentaophphelp/verify-1227.html
本篇目錄
數據驗證在web應用中尤其顯得重要。下面來給大家介紹下禅道框架的數據驗證機制。
一、驗證規則放在什麽地方?
mvc程序中,每一層都可以放驗證規則。比如很多的表單驗證,會自動根據用戶的輸入進行驗證,然後給予提示。那麽數據驗證放在哪一層呢?這個問題網絡上大家有很多的爭議。有的人主要放在view這一層,有的則主張放在control層。zentaoPHP選擇了model層。
爲什麽這樣做呢?因爲model層是底層,所有的數據操作,都要經過model來進行處理。那麽只要在這一關把數據驗證做好,就可以保證數據的准確和安全。當然,框架的用戶,可以同時在前端加上js的驗證,和model層的驗證不會沖突的。下面來看下如何使用禅道的數據過濾機制。
二、zentaoPHP框架驗證機制說明:
受php的filter機制啓發,禅道的數據過濾分爲兩個部分,一個是數據修正,一個是數據驗證。首先是要對從客戶端傳遞過來的數據進行修正,然後再對數據進行校驗。
驗證類是在lib/filter/filter.class.php裏面定義的。
三、數據修正:
首先來看代碼:
$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處理;cleanInt則將變量處理成int類型,join,則將openedBuild使用,連接起來。
最後,還需要把兩個不需要的變量去掉,使用remove。
通過get方法就可以得到一個已經經過修改的完整的數據集合。這個集合已經可以准備入庫了。讓我們來看下數據是如何驗證的。
四、數據檢查
$this->dao->insert(TABLE_BUG)->data($bug) ->autoCheck() ->batchCheck('id, name', 'notempty') ->exec();這句sql插入語句通過data方法,將修正過的數據傳遞給dao對象,然後通過autoCheck()對其進行自動檢查。autoCheck會根據數據庫裏面字段的類型,長度進行判斷。如果類型不對,或者長度不對,會自動記錄錯誤。然後後面調用了batchCheck()方法,對一批字段進行非空的驗證。
当然也可以通过check()方法对单个字段进行验证。验证的规则有很多,比如notempty, unique, email, account等等。
五、獲得錯誤
如果數據驗證過程中沒有錯誤,則執行了exec()方法,將數據插入數據庫。
如果有錯呢?exec()方法什麽都不會執行,但會記錄到錯誤日志中。可以在control中裏面判斷是否有錯誤。
if(dao::isError()) die(js::error(dao::getError()));
如果有錯誤,用js警告框的方式彈出,然後重置錯誤日志。
六、數據修正和數據檢查方法附錄
數據修正方法:
cleanEmail: 将目标字段处理为email encodeURL: 将目标字段进行urlencode cleanURL: 将目标字段中不符合url标准的字符去掉。 cleanFloat: 将目标字段处理为float类型。 cleanINT 将目标字段处理为int类型。 specialChars: 对目标字段使用htmlspecialchars处理。 stripTags: 去除目标字段中的标签。 quote: 对目标字段做quote处理。 setDefault: 对目标字段设置默认值。如果用户有传值,使用用户传的值。 setIF: 当满足某个条件的时候,对每个字段进行设置。 setForce: 强制覆盖某个字段的值。 remove: 删掉某一个字段。 removeIF: 满足某个条件的时候删除某一个字段。 add: 添加某一个字段。 addIF: 当满足某个条件的时候,添加某一个字段。 join: 对目标字段使用逗号连接起来。 callFunc: 使用自定义函数对数据进行修正。
數據檢查方法:
bool: 目标字段必须是布尔型。 int: 目标字段必须是int类型。 float: 目标字段必须是float类型。 email: 目标字段必须是email类型。 url: 目标字段必须是url 类型。 ip: 目标字段必须是ip地址。有一个可选参数:$range all|public|static|private date: 目标字段必须是一个日期格式。 reg: 目标字段必须满足正则表达式。 length: 长度要满足指定的大小。 notEmpty: 目标字段不能为空。 empty: 目标字段必须为空。 account: 目标字段必须是一个合法的用户名。 equal: 目标字段必须等于某一个值。 call: 调用用户自己的检查函数。
-
禅道産品
禅道開源版 禅道企業版 禅道旗艦版 禅道IPD版 -
核心功能
産品管理 項目管理 質量管理 效能管理 -
使用文檔
基本版手冊 企業版手冊 旗艦版手冊 IPD版手冊 開發中心手冊 -
幫助中心
积分問答 常見問題 論壇交流 使用視頻 Gitee GitHub -
關于我們
關于我們 禅道軟件 最新動態 禅道活動 -
禅道社區
禅道博客 積分排行 積分商城 禅道書院 -
聯系方式
聯系人:魏中顯 電話:18561939726 微信:18561939726 Q Q:1746749398北京、上海、深圳分部