溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ThinkPHP中自動(dòng)驗(yàn)證及驗(yàn)證規(guī)則

發(fā)布時(shí)間:2021-01-16 11:31:16 來(lái)源:億速云 閱讀:197 作者:小新 欄目:編程語(yǔ)言

這篇文章將為大家詳細(xì)講解有關(guān)ThinkPHP中自動(dòng)驗(yàn)證及驗(yàn)證規(guī)則,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

詳解ThinkPHP中自動(dòng)驗(yàn)證及驗(yàn)證規(guī)則

ThinkPHP 內(nèi)置了數(shù)據(jù)對(duì)象的自動(dòng)驗(yàn)證功能來(lái)完成模型的業(yè)務(wù)規(guī)則驗(yàn)證。自動(dòng)驗(yàn)證是基于數(shù)據(jù)對(duì)象的,而大多情況下數(shù)據(jù)對(duì)象是基于 $_POST表單 (不是絕對(duì)的)創(chuàng)建的。

基本的自動(dòng)驗(yàn)證功能包括:必須字段、email郵箱格式、唯一性、URL地址、數(shù)字、兩個(gè)字段是否相同、是否等于某個(gè)值等。

要使用系統(tǒng)的自動(dòng)驗(yàn)證功能,只需要在對(duì)應(yīng)的 Model類 里面定義 $_validate 屬性(由多個(gè)驗(yàn)證因子組成的數(shù)組),語(yǔ)法如下:

protected $_validate = array(
    array(驗(yàn)證字段,驗(yàn)證規(guī)則,錯(cuò)誤提示[,驗(yàn)證條件][,附加規(guī)則][,驗(yàn)證時(shí)間])
};
ThinkPHP自動(dòng)驗(yàn)證格式說(shuō)明:
驗(yàn)證因子說(shuō)明
驗(yàn)證字段必須。需要驗(yàn)證的表單字段名稱,這個(gè)字段不一定是數(shù)據(jù)庫(kù)字段,也可以是表單的一些輔助字段,例如驗(yàn)證碼等。
驗(yàn)證規(guī)則必須。要進(jìn)行驗(yàn)證的規(guī)則,需要聯(lián)合附加規(guī)則一起使用。
錯(cuò)誤提示必須。當(dāng)驗(yàn)證不通過時(shí)的提示信息。
驗(yàn)證條件可選。包括:
  1. Model::EXISTS_TO_VAILIDATE 或者 0 :存在字段就驗(yàn)證(默認(rèn))

  2. Model::MUST_TO_VALIDATE 或者 1 :必須驗(yàn)證

  3. Model::VALUE_TO_VAILIDATE 或者 2 :值不為空的時(shí)候驗(yàn)證

附加規(guī)則可選。配合驗(yàn)證規(guī)則使用,包括:
  1. regex:使用正則進(jìn)行驗(yàn)證,表示前面定義的驗(yàn)證規(guī)則是一個(gè)正則表達(dá)式(默認(rèn))

  2. unique:驗(yàn)證唯一性,系統(tǒng)會(huì)根據(jù)字段目前的值查詢數(shù)據(jù)庫(kù)來(lái)判斷是否存在相同的值

  3. confirm:驗(yàn)證表單中的兩個(gè)字段是否相同,前面定義的驗(yàn)證規(guī)則是一個(gè)字段名

  4. equal:驗(yàn)證是否等于某個(gè)值,該值由前面的驗(yàn)證規(guī)則定義

  5. in:驗(yàn)證是否在某個(gè)范圍內(nèi),前面定義的驗(yàn)證規(guī)則必須是一個(gè)數(shù)組

  6. function:使用函數(shù)驗(yàn)證,表示前面定義的驗(yàn)證規(guī)則是一個(gè)函數(shù)名

  7. callback:使用方法驗(yàn)證,前面定義的驗(yàn)證規(guī)則是當(dāng)前 Model 類的一個(gè)方法

驗(yàn)證時(shí)間可選。包括:
  1. Model:: MODEL_INSERT 或者 1 :新增數(shù)據(jù)時(shí)候驗(yàn)證

  2. Model:: MODEL_UPDATE 或者 2 :編輯數(shù)據(jù)時(shí)候驗(yàn)證

  3. Model:: MODEL_BOTH 或者 3 :全部情況下驗(yàn)證(默認(rèn))

自動(dòng)驗(yàn)證例子

下面的例子驗(yàn)證文章標(biāo)題必須填寫且檢測(cè)標(biāo)題是否已存在:

class ArticleModel extends Model{
    protected $_validate = array(
        array('title','require','標(biāo)題不能為空!'),
        array('title','','標(biāo)題已經(jīng)存在!',0,'unique',1),
    };
}

在操作中,當(dāng)使用 create 方法創(chuàng)建數(shù)據(jù)對(duì)象時(shí)會(huì)自動(dòng)進(jìn)行數(shù)據(jù)驗(yàn)證操作(當(dāng) POST 提交表單處理時(shí)):

$Article = D("Article");
if (!$Article->create()){
    // 如果創(chuàng)建失敗,表示驗(yàn)證沒有通過(注:可能原因之一)輸出錯(cuò)誤提示信息
    exit($Article->getError());
}else{
    // 驗(yàn)證通過,繼續(xù)下一步流程如將數(shù)據(jù)寫入數(shù)據(jù)表
}

系統(tǒng)內(nèi)置了一些常用正則驗(yàn)證的規(guī)則,包括:require(必須)、email(郵箱格式)、url(URL地址)、currency(貨幣)、number(數(shù)字)、qq(QQ號(hào)碼)、english(英文字符),可以直接使用。

出于用戶體驗(yàn)考慮,$Article->getError() 返回的錯(cuò)誤提示信息,一般以 Ajax 方式返回,詳細(xì)參見《ThinkPHP Ajax》。

定義自己的驗(yàn)證規(guī)則

當(dāng)內(nèi)置的這些驗(yàn)證規(guī)則無(wú)法滿足驗(yàn)證要求是,可以定義自己的驗(yàn)證規(guī)則,如要求出生年月以 2000-1-1 格式輸入時(shí):

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

關(guān)于“ThinkPHP中自動(dòng)驗(yàn)證及驗(yàn)證規(guī)則”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI