版本:TP5

學後臺的小夥伴應該都對ThinkPHP有一定的瞭解,比如說最傳統的MVC思想,大家肯定對這三個層背的很熟,模型、控制器、視圖,並且很多人或許都認為TP框架就是這三個層,把他們分開,封裝好,就相當於用框架完成了一個項目。

其實TP不只限於這些,分層的這種思想其實是想讓我們的後臺代碼更加的純粹,模塊與模塊之間,方法與方法之間,讓整套代碼更加的順暢,減少冗餘。通過TP對於類的封裝和調用,有一定的理解。

說了這麼多,我們在這篇文章裡面要做的事情就是,在我們的項目模塊裡面開多一層,我把它叫做Validate層,Validate從直面意思就可以知道是驗證的意思,所以我們這一層的主要功能就是用來驗證一些信息,它的原理就是使用了TP5手冊中所介紹的Validate驗證器,所以我們的層級也和它的名字一致。

TP5之Validate

首先,我們先從TP的Validate驗證器開始介紹,因為好多小夥伴都懶得看TP的手冊。

第一步,我們要使用這個驗證器的話先要引入它在TP中的類。

我這裡為了測試建立一個一個xx模塊,和一個test控制器,控制器下面新建一個叉叉方法,首先我們引入一下內置的Validate類,並且對類進行一個實例化,實例化是什麼大家應該都知道。

好了,從圖中看的話,我們實例化Validate的時候是在裡面傳入了一個數組,那麼這個數組代表了什麼,我們不急,進到Validate這個類裡面去看一看。

我們進到TP內部的Validate類中可以看到他這裡把注釋都打好了,構造函數第一個參數是一個數組,這個數組代表的是驗證規則,所以我們在實例化的時候傳入的是一個驗證規則,那麼驗證規則應該怎麼寫呢?

這兩行規則的意思是代表,我們所要驗證的數組中的name欄位是必須存在的,並且它的最大長度不超過25,第二行代表所驗證的數組中的email欄位的內容必須符合TP5所規定的郵箱的格式,否則的話會輸出錯誤。(當然,如果我們覺得TP封裝的郵箱格式不滿意的話,我們是可以修改它的規則的,可以自己封裝一個方法,用到正則驗證,然後把方法名放到我們的規則裏就ok了,後面封裝類的時候我會介紹。)

當然,TP其實封裝了很多很好用的規則,我們要盡量善用這些規則,那麼,這些規則在哪裡可以看到呢。我已經整理在我的博客裏了,歡迎大家去裡面找:

blog.csdn.net/qq_366526

好了,規則我們定義好了,那麼我們要怎麼去驗證我們想要驗證的東西呢,這裡是調用了它類裡面的一個方法:

check方法會驗證你的數據是否符合初始化的時候定義的規則,getError方法會調出你數據不符合規則的時候是哪一部分有問題。

第一個參數是想要驗證的數據,第二個參數是rule,而本類的rule已經在初始化的時候規定了規則,所以他就會去校驗規則。

我們來看一下結果。

我們在上面截圖中想要驗證的那些關鍵的信息都沒有問題,驗證是成功的。

那麼我們看一下如果給一些不符合的數據的話會發生什麼情況。

這樣子的話他就會報錯:

Validate層的封裝

到了這一步,我想要介紹的TP5給大家提供的Validate驗證器就已經結束了,大家瞭解了Validate驗證器是什麼之後,我們就可以開始我們的封裝Validate層了。

拋出幾個問題:

1.為什麼要驗證數據?

首先,如果你要處理的業務邏輯不可以允許有一個空的用戶名存在的話,前端沒有做監聽,後臺要做判斷的話,是不是要寫一個if,郵箱格式又要寫一個if,這樣子if堆了一堆,代碼十分難看,那麼我們這個Validate可以把所有的驗證一次性驗證完,這樣的話代碼是不是整潔多了。

2.那麼我們已經會了Validate驗證器之後,為什麼還要把它封裝層Validate層?

這個問題非常好解釋,因為不夠牛逼,為什麼不夠牛逼?因為我寫一個Validate的層我還要寫十幾行代碼,每個介面都要寫十幾行代碼,是不是不夠爽,如果我一行代碼解決掉Validate驗證過程,這樣,纔算牛逼。

首先新建文件夾,在文件夾下面新建一個base類,這個常規操作大家都曉得

然後我們的base類繼承一下Validate的類,自己寫一個gotocheck方法去簡化Validate的調用

傳入的data變數是一個數組,也就是我們想要驗證的數據,result代表了我們驗證的結果是成功還是失敗

$arr是我們獲取到失敗之後的報錯信息,其中的key代表的是屬性的名字,value代表的是報錯的信息。我們只要報錯的信息,並且只要第一條報錯的信息,後面的不管,我們就這樣子寫了這個循環,然後輸出錯誤,如果成功的話就返回成功。

我們的基本驗證方法封裝完了之後,我們要封裝我們的驗證規則了,因為不同介面的驗證規則不同,所以每個介面都應該擁有一套規則,這樣子的話我們就要把每套數組封裝成一個類文件,這樣的話就解釋了我們為什麼要封裝一個Validate的層:

那麼我們的類文件要怎麼寫呢?TP手冊給我們定義了一套寫法:

大家可以看到rule中的password的規則裡面有一條IsCharacter,這其實是我們封裝的一個方法,用了這個方法,我們就可以讓數據根據完全由自己掌控的一個方法去驗證它,這樣子的話,規則就完完全全掌握在自己手裡了。

preg_match這個正則匹配我就不細說了,大家感興趣的話可以去學學正則。

而這個方法的傳入的參數這四個其實是固定的,如果想知道為什麼的話可以去TP5的手冊上深究,它是模仿了內置的一個方法去寫的。

說了這麼多,到了見證奇蹟的時候,一行代碼完成我們的驗證層:

可以看到,我們從十幾行,幾十行代碼直接縮成了一行,並且將所有的Validate規則封裝成類,將它們層級化

來看看結果:(因為password是不符合我們的規定的)

結果是我們想要的結果。

好啦,本期課程到此結束

本狗頭博客:

blog.csdn.net/qq_366526

推薦閱讀:

相關文章