掌握Thinkphp3 2 0 自動驗證

2022-08-09 04:09:08 字數 4453 閱讀 8688

自動驗證是tp在create資料的時候,自動對資料進行驗證。

tp提供了兩種驗證方式:靜態驗證($_validate屬性----自定義的模型的)和validate()方法

1.靜態驗證-----$_validate屬性

總體的格式: 

1

<?php

2namespace home\model;

3use

think\model;

4class usermodel extends

model

11 ?>

驗證欄位----驗證規則-----錯誤提示-----驗證條件-----附加規則----驗證時間

紅色的是必選字段,黑色的是附加字段

驗證字段:顧名思義,就是需要驗證的字段

驗證規則:系統內建或自定義的規則

驗證條件:

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

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

3.self::value_validate 或 2,表示值不為空的時候驗證。

附近規則:

配合驗證規則使用,包括一下規則:

主要新增修改等驗證。

1.self::model_insert 或 1 新增資料時驗證;

2.self::model_update 或 2 編輯資料時驗證;

3.self::model_both 或 3 全部情況下驗證(預設)。

自動驗證是從上到下以此驗證,上面的錯誤,下面不會有錯誤資訊返回

其實自動驗證是很簡單的,熟悉規則之後來看一下例項:

內建驗證規則:

1模型2

<?php

3namespace home\model;

4use

think\model;

5class usermodel extends

model

34 ?>

3536

37控制器:

3839

<?php

40//

本類由系統自動生成,僅供測試用途

41namespace home\controller;

42use

think\controller;

43use

common\model\usermodel;

44class indexcontroller extends

controller else65}

66 }

結果:

附加:

1

//附加規則regex,驗證3-6位純數字

2array('user', '/^\d$/', '不是 3-6 位純正數字', 0, 'regex'),3//

附加規則equal,驗證是否和指定值相等

4array('user', '李炎恢', '值不對等', 0, 'equal'),5//

附加規則notequal,驗證是否與指定值不等

6array('user', '李炎恢', '值不能相等', 0, 'notequal'),7//

附加規則confirm,驗證兩條字段是否相同

8array('user', 'name', '兩個使用者名稱對比不同!',0,'confirm'),9//

附加規則in,某個範圍,可以是陣列或逗號分割的字串

10array('user', array(1,2,3), '不在指定範圍', 0, 'in'),

11array('user', '張三,李四,王五', '不在指定範圍', 0, 'in'),

12//

附加規則notin,某個範圍,可以是陣列或逗號分割的字串

13array('user', array(1,2,3), '不得在指定範圍', 0, 'notin'),

14array('user', '張三,李四,王五', '不得在指定範圍', 0, 'notin'),

15//

附加規則length,驗證長度或數字範圍

16array('user', '3', '不得小於 3 位', 0, 'length'),

17array('user', '3,5', '不得小於 3 位,不得大於 5 位', 0, 'length'),

18//

附加規則between,驗證某個範圍,數字或逗號字串

19array('user', array(3,5), '必須是 3-5 之間的數字', 0, 'between'),

20array('user', '3,5', '必須是 3-5 之間的數字', 0, 'between'),

21//

附加規則notbetween,驗證某個範圍,數字或逗號字串

22array('user', array(3,5), '必須不是 3-5 之間的數字', 0, 'notbetween'),

23array('user', '3,5', '必須不是 3-5 之間的數字', 0, 'notbetween'),

24//

附加規則expire,設定有效期範圍,必須是表單提交有效,可以是時間戳

25array('user', '2014-1-10,2015-10-10', '時間已過期', 0, 'expire'),

26//

附加規則ip_deny,ip禁止列表

27array('user', '127.0.0.1', '當前 ip 被禁止', 0, 'ip_deny'),

28//

附加規則ip_allow,ip允許列表

29array('user', '127.0.0.1', '當前 ip 沒有被允許', 0, 'ip_allow'),

30//

附加規則callback,**驗證

31array('user', 'checklength', '使用者名稱必須在 3-5 位', 0, 'callback', 3,

32array(3,5)),

33//

**方法

34protected n function checklength($str,$min,$max

) else42}

43//

附加規則function,函式驗證

44array('user', 'checklength', '使用者名稱必須在 3-5 位', 0, 'function', 3,

45array(3,5)),

46//

在 common 資料夾下的 common 資料夾建立 function.php 檔案,會自動載入

47function checklength($str,$min,$max

) e else55}

56如果有多個欄位都包含錯誤,預設只顯示乙個錯誤。如果想顯示全部錯誤,可以設定屬

57性:

58//

批量驗證

59 d protected

$patchvalidate = true;60

如果是直接 post 過來的,直接使用 create()方法即可。

61//

控制器create()方法自動呼叫驗證

62$user = d('user');

63if ($user->create()) else

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

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

71//

返回json格式

72$this->ajaxreturn($user->geterror());

73//

1指定新增資料驗證,2表示修改,

74 f if ($user->create($_post,1)) {} //

一般會自動判斷

**和函式是終極的自定義,還是很強大的

2.動態驗證----動態驗證就是把驗證的規則放在控制器端,這樣,在操作的時候比較靈活,缺點就是比較混亂。

1

//動態驗證

2$rule = array(3

array('user', 'require', '使用者名稱不得為空'),4);

5$user = m('user');

6$data['user'] = '';

7if ($user->validate($rule)->create($data

)) e else

掌握Thinkphp3 2 0 自動完成

自動完成,是在create資料的時候自動執行的乙個或多個動作 自動完成也分為動態和靜態兩種 格式 完成規則 array array 完成欄位1,完成規則,完成條件,附加規則 array 完成欄位2,完成規則,完成條件,附加規則 完成字段 必填,需要的欄位名 完成規則 必填,配合附加規則完成 完成條件...

掌握Thinkphp3 2 0 標籤庫

1.什麼是內建標籤?什麼是標籤擴充套件庫?cx.class.php 和 html.class.php 2.怎麼載入非內建標籤,怎麼使用?兩種方式載入 3.怎麼擴充套件自定義的標籤?仿照html.class.php寫 仔細回答這3個問題 問題一 think library think template...

掌握Thinkphp3 2 0 模版基礎

我們將要學習一下 thinkphp 模版,thinkphp 內建了乙個基於 xml 的效能 卓越的模版引擎 thinktemplate,使用了動態編譯和快取技術,支援自定義標籤庫,其實我還體會不到其中的強大,慢慢體會吧 一 變數輸出 1.普通變數 控制器提供資料 1 給模版傳遞乙個變數 2 user...