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的获取器,尽情的使用吧,在使用过程中,相信你会有更多感悟的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?