Thinkphp編程中幾種常見的實用技巧講解

  在Thinkphp編程中集成了很多用起來非常方便的方法。對於剛接觸的編程人員來說,可謂是隻要掌握並靈活運用了,那麼就可以達到事半功倍的效果了,下面就來爲大家詳細的講解一下。

  1. getField

  getField的方便之處在於可以獲取一個值,一個數組,或者一組鍵值對。

  接下來舉三個例子簡單說明。

  A. 獲取一個值。

  在修改密碼的方法中,要驗證舊密碼是否匹配。現已知用戶id爲$uid。

  則$old_pass = $Model->where(“uid=’$uid’”)->getField(‘password’);

  即可獲取舊密碼來進行驗證。

  B. 獲取一個數組

  如果一級分類下有二級分類,現在給出一級分類,要求搜索到一級分類下的所有產品。

  解決方法就是首先獲得所有的二級分類ID,這時候用getField是非常方便的。

  $arr_types = $Model->where(“pid=’$type_id’”)->getField(‘id’,true);

  $map[‘type_id’] = array(‘in’,$arr_types);

  $products = M(‘product’)->where($map)->select();

  這樣就獲取到了這個一級分類下的所有產品,該方法僅限二級分類,如果有三級分類請用其他方法解決。

  C. 獲取一組鍵值對

  鑑於水平有限,目前主要用於關聯查詢的信息展示中,可以在一定程度上給數據庫減壓。

  比如要展示一個用戶的購物車,然而從購物車表中僅僅能查到商品的ID,但我想要展示商品的名字。這時候從商品表中獲取一組鍵值對即可解決這個問題。

  $arr_product = $Model->getField(‘id,product_name’,true);

  輸出的時候,對應商品的名字爲$arr_product[$product_id];

  當然,用join也能解決這個問題。

  2. page

  顧名思義,這是thinkphp封裝好的一個分頁類,用起來非常方便。不同版本用法不同,詳細用法可以查看手冊。這裏要講的是一個終極解決方案。無論哪個版本,甚至是原生的php都可以解決分頁問題。

  假設要分頁的結果是$product_list(數據類型array)。

  當前頁碼:$page = I(‘page’)?I(‘page’):1;

  每頁信息條數:$per_page = 10;

  獲得分頁結果:$product_list = array_slice($product_list,($page-1)* $per_page, $per_page);

  Array_slice參數:數組名,起始位置(0開始),分割的數量。

  3. setField

  有時候需要改變一組數據中或一類數據中的某個字段,這時候用save方法有點大材小用。

  比如我只需要修改一個狀態值,將某個或某類的status值修改爲1,表示可用。

  $Model->where($map)->setField(‘status’,1);

  如果同時我想把修改時間也記錄下來怎麼辦。

  $data[‘status’] = 1;

  $data[‘edittime’] = time();

  $Model->where($map)->setField($data);

  setField可以修改一個字段,也可以修改多個字段。

  4. setInc、setdec

  SetInc,常用來統計閱讀量點擊量。每次請求文章的時候,只需要:

  $Model->where(“id=’$id’”)->setInc(‘readnum’);

  默認增加1,也可以自定義。詳細用法可以看手冊。

  Setdec用法一樣。

  5. 後臺有關於添加、編輯一類控制器的技巧

  做後臺開發的都知道,添加一條數據需要用兩個控制器,一個用來展示頁面,另一個用來操作,其實兩個控制器可以合二爲一的。現在已添加爲例:

  常規寫法:

  Public function addproduct(){

  $this->display();

  }

  Public function do_addproduct(){

  $Model = M(‘product’);

  $data = array(

  ‘name’ => I(‘name’),

  ‘price’ => I(‘price’),

  ……

  );

  $result = $Model->add($data);

  If($result){

  Success(‘添加成功’,U(‘product_list’));

  }else{

  Error(‘添加失敗’);

  }

  }

  合二爲一的寫法:

  Public function addproduct(){

  If(IS_POST){

  $Model = M(‘product’);

  $data = array(

  ‘name’ => I(‘name’),

  ‘price’ => I(‘price’),

  ……

  );

  $result = $Model->add($data);

  If($result){

  Success(‘添加成功’,U(‘product_list’));

  }else{

  Error(‘添加失敗’);

  }

  }else{

  $this->display();

  }

  }

  以上是添加一類的控制器的寫法,接下來同樣的思路,展示修改控制器的寫法。

  Public function editproduct(){

  $id = I(‘id’);

  $Model = M(‘product’);

  If(IS_POST){

  $data = array(

  ‘id’ => $id,

  ‘name’ => I(‘name’),

  ‘price’ => I(‘price’),

  ……

  ‘addtime’=>time()

  );

  $result = $Model->save(‘data’);

  If($result){

  Success(‘修改成功’,U(‘product_list’));

  }else{

  Error(‘添加失敗’,U(‘editproduct’,array(‘id’=>$id)));

  }

  }else{

  $this->info = $Model->find($id);

  $this->display();

  }

  }

  最後需要跟各位編程人員講解一些注意事項:

  a.展示頁面的時候,id以input[hidden]形式展示,提交的時候一併提交上去,寫起來會輕鬆很多。

  b.如果在$data數組中有主鍵存在,直接save方法即可。

  c.爲了避免沒有任何修改導致返回結果失敗的情況,加上時間即可解決。

  合二爲一的方法,最大的好處就是在模板中寫

  表單的時候,action=”/Admin/Technology/edit/id/507.html”即可,十分方便。好了到這裏就爲大家講完了,如果還是存在不理解的地方,那麼大家可以諮詢來尋求幫助。

  本文由專業的鄭州app開發公司燚軒科技整理髮布,原創不易,如需轉載請註明出處!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章