總結ThinkPHP使用技巧經驗分享(三)

add方法返回主鍵(id)的值
在往數據表中添加數據時調用add方法,默認返回值就是剛添加的id值,就不用再去查詢了.

save方法返回值的判斷
在修改數據時,如果修改成功返回的是被修改的記錄數0,1,2,3......
注意:以下幾種情況返回 false,所以判斷更新失敗應使用 if(false === $this->save())
(1)更新的數據爲空
(2)_before_update()方法返回false
(3)沒有任何更新條件(沒有定義where()裏的條件,或者保存的數據裏沒有主鍵的值)

查詢後置方法詳解
如_after_select,_after_insert,_after_update,_after_delete,_after_find等
巧妙地利用這些方法可以簡化開發
用_after_select(&$result,$options)舉例:
參數:$result,這是select出的結果數組。注意這裏是一個引用傳參,也就是說我們可以直接改變傳遞過來的值而不需要返回
$options,這是查詢的條件,也就是where()裏面的條件
假如你查詢出的數據有time這一字段,並且是以int型保存的,那麼可以在這個方法裏進行時間格式化的操作
  1. protected function  _after_select(&$result,$options)
  2.    foreach($result as $key=>$value){
  3.          $result[$key]['time'] = date('Y-m-d H:i:s', $value['time']);
  4.    }
  5. }
複製代碼
這樣就不需要每次在模板上顯示的時候,再用函數來處理了
同樣地,可以用_after_insert來代替關聯操作,在新增完一條數據後再根據參數更新一些關聯的數據
當然,除了後置方法,還有前置方法。可以用來代替一些複雜的數據驗證或者進行數據的預處理,類似於自動完成和自動驗證
  1. protected function _before_insert(&$data,$options) {
  2.         //對新增前的數據進行處理
  3.         foreach ($data as $key=>$value){
  4.             $value['status']   =   1;//類似於自動完成
  5.             if($value['age'] > 100){//類似於自動驗證
  6.                   return false;
  7.             }
  8.         }
  9.     }
複製代碼
最後,有幾點需要注意的:1,這些方法都是必須寫在model裏面的
2,這些方法所接收的參數,有些是引用傳參,有些是傳值,得注意區分。具體可參考手冊
3,在後置方法裏不需要返回值。而前置方法裏可以返回 false 來阻止進行下一步的操作

打印sql語句
$User = D('User');
$User->select();
echo $User->getLastSql();或者echo $User->_sql();
獲取最後執行的sql語句,方便查看調試

跨模板主題調用模板
假如Tpl下有new主題,該主題下有User文件夾,文件夾下有index.html
你當前的模板主題是Tpl下的default,那麼可以用$this->display('new:User:index');
或者用全路徑輸出$this->display('./Tpl/new/User/index.html');

路由規則^符號的使用
這個符號在手冊中沒有提及,但是作用卻不可忽視。
用法:'user/^getlist|tag' => 'user/index'
作用:在user模塊中,除了getlist和tag方法,其他存在的方法全部指向index方法。參數之間用|間隔
這樣可以屏蔽一些不想讓用戶訪問到但是又必須定義成public的方法
發佈了59 篇原創文章 · 獲贊 7 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章