ThinkPHP 自動驗證及驗證規則詳解

來源:互聯網
上載者:User
ThinkPHP 自動驗證

ThinkPHP 內建了資料對象的自動驗證功能來完成模型的商務規則驗證。自動驗證是基於資料對象的,而大多情況下資料對象是基於 $_POST表單 (不是絕對的)建立的。

基本的自動驗證功能包括:必須欄位、email郵箱格式、唯一性、URL地址、數字、兩個欄位是否相同、是否等於某個值等。

要使用系統的自動驗證功能,只需要在對應的 Model類 裡面定義 $_validate 屬性(由多個驗證因子組成的數組),文法如下:

protected $_validate = array(    array(驗證欄位,驗證規則,錯誤提示[,驗證條件][,附加規則][,驗證時間])};
ThinkPHP自動驗證格式說明:
驗證因子 說明
驗證欄位 必須。需要驗證的表單欄位名稱,這個欄位不一定是資料庫欄位,也可以是表單的一些輔助欄位,例如驗證碼等。
驗證規則 必須。要進行驗證的規則,需要聯合附加規則一起使用。
錯誤提示 必須。當驗證不通過時的提示資訊。
驗證條件 可選。包括:

  1. Model::EXISTS_TO_VAILIDATE 或者 0 :存在欄位就驗證(預設)
  2. Model::MUST_TO_VALIDATE 或者 1 :必須驗證
  3. Model::VALUE_TO_VAILIDATE 或者 2 :值不為空白的時候驗證
附加規則 可選。配合驗證規則使用,包括:

  1. regex:使用正則進行驗證,表示前面定義的驗證規則是一個Regex(預設)
  2. unique:驗證唯一性,系統會根據欄位目前的值查詢資料庫來判斷是否存在相同的值
  3. confirm:驗證表單中的兩個欄位是否相同,前面定義的驗證規則是一個欄位名
  4. equal:驗證是否等於某個值,該值由前面的驗證規則定義
  5. in:驗證是否在某個範圍內,前面定義的驗證規則必須是一個數組
  6. function:使用函數驗證,表示前面定義的驗證規則是一個函數名
  7. callback:使用方法驗證,前面定義的驗證規則是當前 Model 類的一個方法
驗證時間 可選。包括:

  1. Model:: MODEL_INSERT 或者 1 :新增資料時候驗證
  2. Model:: MODEL_UPDATE 或者 2 :編輯資料時候驗證
  3. Model:: MODEL_BOTH 或者 3 :全部情況下驗證(預設)
自動驗證例子

下面的例子驗證文章標題必須填寫且檢測標題是否已存在:

class ArticleModel extends Model{    protected $_validate = array(        array('title','require','標題不可為空!'),        array('title','','標題已經存在!',0,'unique',1),    };}

在操作中,當使用 create 方法建立資料對象時會自動進行資料驗證操作(當 POST 提交表單處理時):

$Article = D("Article");if (!$Article->create()){    // 如果建立失敗,表示驗證沒有通過(註:可能原因之一)輸出錯誤提示資訊    exit($Article->getError());}else{    // 驗證通過,繼續下一步流程如將資料寫入資料表}

系統內建了一些常用正則驗證的規則,包括:require(必須)、email(郵箱格式)、url(URL地址)、currency(貨幣)、number(數字)、qq(QQ號碼)、english(英文字元),可以直接使用。

出於使用者體驗考慮,$Article->getError() 返回的錯誤提示資訊,一般以 Ajax 方式返回,詳細參見《ThinkPHP Ajax》。

定義自己的驗證規則

當內建的這些驗證規則無法滿足驗證要求是,可以定義自己的驗證規則,如要求出生年月以 2000-1-1 格式輸入時:

array('birthday','/^d{4}-d{1,2}-d{1,2}$/','出生年月格式錯誤!'),

可見,只需幾行簡單的代碼,就實現了各種不同方式的表單驗證,靈活使用 ThinkPHP 自動驗證,可以讓開發過程事半功倍。更多自動驗證列子,參見本節內容之《ThinkPHP 自動驗證執行個體》。

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.