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‘);
}
在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的獲取器,盡情的使用吧,在使用過程中,相信你會有更多感悟的。
tp5框架的獲取器