- 🏠 简介
- 🔌 api接口
-
🔧 插件开发
- 介绍
- 插件优势
- 新建插件
- 技术栈
- 插件开发规范
- 插件目录结构
- model 层开发
- service 层开发
- api 接口开发
- menu 菜单开发
-
event 事件钩子开发
- 开发指南
- 常用事件
- SiteInit 站点初始化事件
- AddSiteAfter 站点创建后事件
- MemberRegister 会员注册后事件
- MemberLogin 会员登录后事件
- PayCreate 支付创建事件
- PaySuccess 支付成功事件
- RefundSuccess 退款成功事件
- TransferSuccess 转账成功事件
- BottomNavigation 底部导航事件
- NoticeData 消息模板数据内容事件
- GetQrcodeOfChannel 创建二维码事件
- ExportDataType 导出数据类型事件
- ExportData 导出数据源事件
- GetPosterType 海报类型事件
- GetPosterData 海报数据事件
- ShowCustomer 应用管理加载事件
- GetWechatTransferTradeScene 微信支付转账场景事件
- ThemeColor 主题风格事件
- initWap 手机端初始化加载事件
- dict 数据字典开发
- layout 自定义布局开发
- job 消息队列和计划任务开发
- notice 消息发送开发
- printer 小票打印模板开发
- export 数据导出开发
- diy 自定义组件/页面装修开发
- diy 自定义表单组件开发
- poster 自定义海报开发
- icon 引入图标
- 支付方式开发
- upgrade 插件版本升级
- 打包插件
- 授权信息变更回调通知
- 官网上架
- 📝 二次开发须知
- 👨💻 二次开发指导
-
🎬 二次开发应用插件视频教程
- 二次开发安装视频教程
- 准备工作与创建插件
- 插件目录整体说明
- 插件admin目录
- 插件app目录说明(adminapi、api、验证器)
- 插件app目录(dict、job)
- 插件app目录说明(lang、listener)
- 插件app目录说明(model、service)
- 插件uniapp目录说明
- 插件开发之后台功能开发(代码生成器)
- 插件开发之uniapp功能开发(api)第一节
- 插件开发之uniapp功能开发(api)第二节
- 插件开发之uniapp功能开发(api)第三节
- 插件安装与打包原理
- 消息队列开发
- 计划任务开发
- DIY组件和自定义页面装修开发
- 支付接口开发
- 插件升级包打包流程以及云编译功能
获取器
获取器用于对模型数据进行处理后再返回,适用于需要格式化展示的场景。
命名规则
获取器的命名规则为getFieldNameAttr,其中FieldName为数据表字段的驼峰转换,Attr为固定后缀。
转换规则
在ThinkPHP框架中,数据表字段名与获取器方法名之间存在明确的命名转换规则:
转换示例
| 数据表字段名(小写加下划线) | 获取器方法名(驼峰命名) |
|---|---|
status_text |
getStatusTextAttr |
gender_text |
getGenderTextAttr |
is_adult |
getIsAdultAttr |
goods_cover_thumb_small |
getGoodsCoverThumbSmallAttr |
转换过程
-
将下划线分隔的字段名转换为驼峰命名:
status_text→StatusText
-
添加前缀
get和后缀Attr:StatusText→getStatusTextAttr
-
在调用获取器时,使用原始的小写加下划线字段名:
$user = User::find(1); echo $user->status_text;
框架内部会自动处理这种命名转换,将字段名转换为对应的获取器方法名并调用。
状态文本获取器
/**
* 获取器:用户状态文本
* @param $value
* @param $data
* @return string
*/
public function getStatusTextAttr($value, $data)
{
$status_map = [
0 => '禁用',
1 => '启用'
];
return isset($status_map[$data['status']]) ? $status_map[$data['status']] : '未知';
}
使用方式:
$user = User::find(1);
echo $user->status_text; // 输出:"启用" 或 "禁用"
性别文本获取器
/**
* 获取器:性别文本
* @param $value
* @param $data
* @return string
*/
public function getGenderTextAttr($value, $data)
{
$gender_map = [
0 => '未知',
1 => '男',
2 => '女'
];
return isset($gender_map[$data['gender']]) ? $gender_map[$data['gender']] : '未知';
}
使用方式:
$user = User::find(1);
echo $user->gender_text; // 输出:"男"、"女" 或 "未知"
业务逻辑获取器
/**
* 获取器:是否成年
* @param $value
* @param $data
* @return bool
*/
public function getIsAdultAttr($value, $data)
{
return isset($data['age']) && $data['age'] >= 18;
}
使用方式:
$user = User::find(1);
if ($user->is_adult) {
// 执行成年用户相关逻辑
}
封面缩略图获取器
/**
* 获取器:封面缩略图
*/
public function getGoodsCoverThumbSmallAttr($value, $data)
{
if (isset($data[ 'goods_cover' ]) && $data[ 'goods_cover' ] != '') {
return get_thumb_images($data[ 'site_id' ], $data[ 'goods_cover' ], FileDict::SMALL);
}
return [];
}
使用方式:
$field = 'goods_cover';
$list = $this->model->field($field)->append([ 'goods_cover_thumb_small', 'goods_cover_thumb_mid' ])->select()->toArray();
在查询时,数据会自动转换类型,如图所示:

注意
必须查询原有字段,才能进行字段转换,否则会报错