tp5框架的獲取器


  tp5的獲取器功能很強大,一下子就喜歡上了,你可以在模塊里任意定義表里不存在的字段,在前台調用很方便。話不多說直接上demo:

  1.命名規則   get + 屬性名的駝峰命名+ Attr

  直接就能在model里定義:(本示例在UserModel里定義的(User.php文件))

  eg1:

  protected function getSexAttr($value) {
    $text = [1 => '男', 2 => '女', 3 => '未知'];
    return $text[$value];
  }

  此情景下user表里是存在sex字段的,sex的值為1,2,3三種情況。這個獲取器的作用在於,后台獲取user表的list后,sex值仍為1,2,3。前台循環調用的時候就可以用{volist name="list" id="v" key="k"}{$v.sex}{/volist} 此時的{$v.sex}就對應成男,女,未知。

  2.針對前台需要用到sex值1,2,3同時也要用到文本值男,女,未知的時候,這個獲取器就有局限性了,此時,小伙伴們很容易想到,定義兩個獲取器,一個存1,2,3另一個存男,女,未知。ok,這個方法是可行的,在這里簡單介紹一下我想到的方法,定義一個獲取器存二維數組。

  eg2:

  protected function getSexAttr($value) {
    $text = [1 => '男', 2 => '女', 3 => '未知'];
    return ['val' => $value, 'text' => $text[$value]];
  }

  這種情況下,前台就可以直接使用了{$v.sex.val}是1,2,3值的格式。{$v.sex.text}就是男,女,未知的格式。

  看到這里,相信小伙伴們已經蠢蠢欲動了吧,這還不止呢,接下來介紹一下,定義不存在的字段,映射其他表的字段。就可以應用到項目中了。

  3.關聯其他表的字段構建user表里不存在的字段,其他表就以info表為例吧

  eg3:

  protected function getHosNameAttr($value, $data) {

    $name = model('Info')->where('info_id', $data['id'])->value('hos_name');
    return $name;
  }

  在user表里構造了hos_name字段,這個例子很簡單,user表的主鍵id是info表的外鍵info_id,通過這個關系就可以將info里的字段映射到user表里,在后台只查詢user表的數據就能用hos_name了,可以省去兩表聯合查詢

 

  4.如果又需要用到值,又需要用到文本的情況,就可以用第二個例子的思路了。

  eg4:

 

  protected function getArchivesAttr($value, $data) {
    $archiveid = model('Info')->where('info_id', $data['id'])->value('archives_id');
    $archivename = model('Archives')->where('id', $archiveid)->value('name');
    return ['val' => $archiveid, 'text' => $archivename];
  }

  此示例,在user表里構建了archives字段,val存的是info表的archives_id字段,text是archives_id對應的在表archives里的name字段。省去了三表聯合查詢,這樣在后台只需要查詢user表就可以在前台調用archives字段了。

  怎樣,是不是你也不自覺得喜歡上了tp5的獲取器,盡情的使用吧,在使用過程中,相信你會有更多感悟的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM