第 39 章 ThinkPHP 自動驗證

2022-09-09 15:45:32 字數 3191 閱讀 7831

本節課,我們將要學習一下 thinkphp 模型層提供的一種資料驗證方法,可以在使用 create 建立資料物件的時候進行自動驗證。

一.驗證規則 資料驗證可以對表單中的字段進行非法的驗證操作。

一般提供了兩種驗證方式:靜態定 義($_validate 屬性)和動態驗證(validate()方法)。

//驗證規則 array( array(驗證欄位1,驗證規則,錯誤提示,[驗證條件,附加規則,驗證時間]), array(驗證欄位2,驗證規則,錯誤提示,[驗證條件,附加規則,驗證時間]), ...... );

ps:驗證字段、驗證規則和錯誤提示這三項是必選的,大多數也是用這三項;而驗證 條件、附加規則和驗證時間是可選的。 驗證字段:一般來說是表單的欄位名,不一定必須和資料表匹配的,因為有一些比如密 碼確認等輔助欄位的存在。 驗證規則:系統內建了常用的規則,require(字段必填)、email(郵箱格式)、url(url 格式)、currency(貨幣)、number(正整數)、integer(整數)、double(浮點數)、zip(郵 政編碼)、english(英文)。這些規則預設採用的附加規則是 regex,正規表示式驗證,只 不過是設定好的。 錯誤資訊:驗證失敗後的提示。

驗證條件:共三種:

1.self::exists_validate 或 0,表示存在欄位就驗證(預設);

2.self::must_validate 或 1,表示必須驗證;

//內建驗證number,驗證是否為正整數 array('user', number, '正整數格式不正確!'), //內建驗證integer,驗證是否為整數,正負均可 array('user', 'integer', '整數格式不正確!'), //內建驗證double,驗證是否為浮點數,正負均可 array('user', 'double', '整數格式不正確!'), //內建驗證english,驗證是純英文 array('user', 'english', '不是純英文!'), thinkphp 還提供了附加規則,來提公升自動驗證的擴充套件性: //附加規則regex,驗證3-6位純數字 array('user', '/^\d$/', '不是 3-6 位純正數字', 0, 'regex'), //附加規則equal,驗證是否和指定值相等 array('user', '李炎恢', '值不對等', 0, 'equal'), //附加規則notequal,驗證是否與指定值不等 array('user', '李炎恢', '值不能相等', 0, 'notequal'), //附加規則confirm,驗證兩條字段是否相同 array('user', 'name', '兩個使用者名稱對比不同!',0,'confirm'),

//附加規則in,某個範圍,可以是陣列或逗號分割的字串 array('user', array(1,2,3), '不在指定範圍', 0, 'in'), array('user', '張三,李四,王五', '不在指定範圍', 0, 'in'), //附加規則notin,某個範圍,可以是陣列或逗號分割的字串 array('user', array(1,2,3), '不得在指定範圍', 0, 'notin'), array('user', '張三,李四,王五', '不得在指定範圍', 0, 'notin'), //附加規則length,驗證長度或數字範圍 array('user', '3', '不得小於 3 位', 0, 'length'), array('user', '3,5', '不得小於 3 位,不得大於 5 位', 0, 'length'), //附加規則between,驗證某個範圍,數字或逗號字串 array('user', array(3,5), '必須是 3-5 之間的數字', 0, 'between'), array('user', '3,5', '必須是 3-5 之間的數字', 0, 'between'), //附加規則notbetween,驗證某個範圍,數字或逗號字串 array('user', array(3,5), '必須不是 3-5 之間的數字', 0, 'notbetween'), array('user', '3,5', '必須不是 3-5 之間的數字', 0, 'notbetween'), //附加規則expire,設定有效期範圍,必須是表單提交有效,可以是時間戳 array('user', '2014-1-10,2015-10-10', '時間已過期', 0, 'expire'), //附加規則ip_deny,ip禁止列表 array('user', '127.0.0.1', '當錢 ip 被禁止', 0, 'ip_deny'), //附加規則ip_allow,ip允許列表 array('user', '127.0.0.1', '當前 ip 沒有被允許', 0, 'ip_allow'),

//附加規則callback,**驗證 array('user', 'checklength', '使用者名稱必須在 3-5 位', 0, 'callback', 3, array(3,5)),

//**方法 protected function checklength($str,$min,$max) else } //附加規則function,函式驗證 array('user', 'checklength', '使用者名稱必須在 3-5 位', 0, 'function', 3, array(3,5)), //在 common 資料夾下的 common 資料夾建立 function.php 檔案,會自動載入 function checklength($str,$min,$max) else } 如果有多個欄位都包含錯誤,預設只顯示乙個錯誤。如果想顯示全部錯誤,可以設定屬 性: //批量驗證 protected $patchvalidate = true; 如果是直接 post 過來的,直接使用 create()方法即可。

//控制器create()方法自動呼叫驗證 $user = d('user'); if ($user->create()) else

ps:由於使用的 usermodel 模型類,所以必須是 d()方法例項化。

如果想把錯誤資訊返回給ajax處理,可以是同ajaxreturn()方法返回json資料。

//返回json格式 $this->ajaxreturn($user->geterror());

//1指定新增資料驗證,2表示修改, if ($user->create($_post,1)) {}

//一般會自動判斷 三.動態驗證 動態驗證就是把驗證的規則放在控制器端,這樣,在操作的時候比較靈活,缺點就是比 較混亂。

//動態驗證 $rule = array( array('user', 'require', '使用者名稱不得為空'), ); $user = m('user'); $data['user'] = ''; if ($user->validate($rule)->create($data)) else

thinkphp5第31課 資料自動完成

資料自動完成指在不需要手動賦值的情況下對字段的值進行處理後寫入資料庫。系統支援 auto insert 和 update 三個屬性,可以分別在寫入 新增和更新的時候進行欄位的自動完 成機制,auto屬性自動完成包含新增和更新操作 我們定義學生模型如下 use think model class st...

第7章 自動丟擲異常的應用

public class systemexceptiontest public static void main string args 1.知識點分析 1 自動丟擲異常 由系統自動丟擲的異常稱為自動丟擲異常,即一旦出現某些執行錯誤時,系統將會為這些錯誤自動產生對應的異常類物件。2 對程式的分析 以...

騰訊Android自動化測試實戰第3章

第3章 robotium框架工作原理及實踐 任何技術都離不開基礎知識。首先,本章將介紹robotium是什麼以及有關robotium的一些基礎知識,讓讀者了解robotium的基本規則。其次,將從native和webview兩方面簡析robotium測試框架的運作原理,並介紹robotium的實際應...