ThinkPHP 自動驗證與自動填充無效可能的原因

2022-03-03 15:49:45 字數 1331 閱讀 2726

自動驗證與自動填充是在使用thinkphp時經常用到的功能,但偶爾會遇到自動驗證與自動填充無效的情況,本文就thinkphp 自動驗證與自動填充無效可能的原因做一些分析。

thinkphp 自動驗證與自動填充是在建立資料物件 create() 時實現的,因此自動驗證與自動填充無效很大程度上與 create() 有關。

create 方法語法如下:

create(mixed data, string type)

data 表示接受的資料,type 表示本次的具體操作(寫入還是更新資料)。兩個引數都可省略,data 引數省略的情況下預設為接受 $_post 資料,而 type 預設情況下由系統自動識別。

但系統自動識別 type 是有缺陷的,當傳入的字段有主鍵欄位時,系統就識別為更新操作,否則就是寫入操作。所以當主鍵欄位非自動增長而是需要 sql 寫入時,那麼自動驗證和自動填充都可能無效。

例如新增資料記錄時,如果表單中有主鍵字段或者系統中產生了主鍵字段(如錄入裝置編號),那麼 thinkphp 就認為本次操作為更新操作,對於例如下面設定的自動驗證和填充都會略過:

protected

$_validate = array

(

//新增時驗證標題唯一

array('title','','標題已經存在!',0,'unique',1),};

//自動填充

protected

$_auto = array

(

//新增時填充時間戳

array('pubtime','time',1,'function'),);

儘管在操作中,執行了 add() 操作將資料寫入了資料表,但這時會發現自動驗證與自動填充無效。

出現這種情況時,只需將操作型別顯式的傳入 create() 方法即可,即 create($_post,1),告訴系統本次操作為寫入資料。另外如果傳入的資料不是 $_post ,也要將資料當作引數傳入,如 create($_get)。

由於粗心,未對應好錶單字段與資料表字段。

在開發過程中,更改了表字段名稱,而快取未及時更新,導致系統判斷為無效欄位而被 unset 掉。所以在更改了表字段名稱之後,及時將 runtime/data 下的資料表快取清除。

model 命名錯誤,未嚴格按照規範命名,如頭字母未大寫或粗心導致字母順序不對,多或少字母等。這等錯誤往往會直接導致模型失效。

一般情況下,使用 m 方法例項化模型時,是無法例項化自定義模型類的,也就無法使用自動驗證與自動完成功能,因此建議使用 d 方法來例項化模型類。如果必須要在 m 方法中實現自動驗證或自動完成,參看《thinkphp 使用m方法(不建立模型類)時實現自動驗證與自動填充》。

thinkPHP的自動驗證與自動填充

慢慢的意識到除錯程式是一件很痛苦的事情!很多時候甚至都不會有錯誤提示,我要從 開始找這個錯誤或者是bug?這兩天因為這樣的一些問題都有點心力交瘁了!呵呵,任重而道遠呀.1.thinkphp不能進行自動完成和自動驗證!從網上找到一篇文章,thinkphp 自動驗證與自動填充無效可能的原因,我簡單總結下...

ThinkPHP 自動驗證

thinkphp 內建了資料物件的自動驗證功能來完成模型的業務規則驗證。自動驗證是基於資料物件的,而大多情況下資料物件是基於 post表單 不是絕對的 建立的。基本的自動驗證功能包括 必須字段 email郵箱格式 唯一性 url位址 數字 兩個字段是否相同 是否等於某個值等。要使用系統的自動驗證功能...

ThinkPHP自動驗證

array 驗證字段,驗證規則,錯誤提示,驗證條件,附加規則,驗證時間 1.驗證字段 需要驗證的表單字段名稱,這個欄位不一定是資料庫字段,也可以是表單的一些輔助字段,例如確認密碼和驗證碼等等。有個別驗證規則和字段無關的情況下,驗證欄位是可以隨意設定的,例如expire有效期規則是和表單字段無關的。2...