ThinkPHP 內置了數據對象的自動填充功能,可以用來處理默認值、數據過濾以及其他系統寫入字段的自動處理.
要使用自動填充功能,只需要在對應的 Model類 里面定義 $_auto 屬性(由多個驗證因子組成的數組),$_auto 屬性是由多個填充因子組成的數組,語法格式如下:
protected $_auto = array( array(填充字段,填充內容[,填充條件][,附加規則])};
填充因子 說明
填充字段 必須。需要填充的表單字段,這個字段不一定是數據庫字段,也可以是表單的一些輔助字段,例如驗證碼等。
填充內容 必須。要對字段自動填充的內容。
填充條件 可選。包括:
Model:: MODEL_INSERT 或者 1 :新增數據時候填充(默認)
Model:: MODEL_UPDATE 或者 2 :更新數據時候填充
Model:: MODEL_BOTH 或者 3 :全部情況下填充
附加規則 可選。包括:
string:字符串,表示填充內容為字符串(默認)
function:使用函數,表示填充的內容是一個函數返回值
callback:使用方法,表示填充的內容是一個當前 Model 的方法返回值
field:字段,表示填充的內容是一個其他字段的值
自動填充例子
用戶注冊或修改資料時,可能用到的自動填充例子:
- class UserModel extends Model{ protected $_auto = array ( // 新增的時候把status字段設置為1 array('status','1'), // 對password字段在所有情況下使用md5函數處理 array('password','md5',3,'function'), // 對username字段在新增時回調getName方法 array('username','getName',1,'callback'), // 對regdate字段在新增時寫入當前時間戳 array('regdate','time',1,'function'), // 對regip字段在新增時寫入用戶注冊IP地址 array('regip','get_client_ip',1,'function'), );}
- 和自動驗證一樣,自動完成機制需要使用 create 方法才能生效:
- $Article = D("User");if(!$User->create()){ // 如果創建數據對象失敗(可能是驗證未通過等),輸出錯誤提示信息 exit($Article->getError());}else{ // 繼續下一步流程如將數據寫入數據表}
提示:與自動驗證不同的是,自動填充無效時(如調用一個不存在的函數或自動填充的字段不存在等)并不導致創建數據對象(create())失敗,只能通過調試或實際數據入庫來檢測自動填充是否正確有效.
動態改變自動完成規則
和自動驗證一樣,可以在操作方法中使用 setProperty方法 動態的更改自動完成的規則:
- $Dao = D("User");$auto = array ( // 僅對password字段進行處理 array('password','md5',1,'function') );$User->setProperty("_auto",$auto);if(!$User->create()){ ……}
|
新聞熱點
疑難解答
圖片精選