项目简介
TTH 是基于 ThinkPHP6 + ThinkAdmin 开发的快速开发框架,采用简化型领域驱动设计(DDD)架构,提供开箱即用的工具类、服务类、第三方接口类,支持多端开发(后台管理、API 接口、微信生态、Uniapp 前端)。
项目地址:https://gitee.com/PHPchengxuyuan/min-admin
技术栈
后端框架: ThinkPHP 6.0 后台框架: ThinkAdmin PHP 版本: >= 8.0 数据库: MySQL >= 5.7 缓存: Redis >= 2.0 前端框架: Uniapp (Vue 2) + uView UI
核心特性
开箱即用
✅ 大量工具类、服务类、第三方接口类、示例代码 ✅ 提供控制器、服务层、数据仓库层、定时任务基类 ✅ 已接管异常,无需担心未使用 try 导致异常弹窗的情况 ✅ 提供多端登录中间件,自动校验并获取登录用户 ✅ 提供接口请求防抖中间件,无需担心接口请求频率
架构设计
采用简化型领域驱动设计(DDD):
├─ 控制器层 (Controller) - 接收请求、参数校验、调用服务
├─ 服务层 (Service) - 业务逻辑处理
├─ 数据仓库层 (Repository) - 数据访问逻辑
└─ 模型层 (Model) - 数据库映射
灵活的架构调整:
多应用场景下,可将 models、repositories分入应用目录下大业务场景下,可将 repositories拆分为service、dao层颗粒度尽量细到一个表对应一个数据仓库
后台快速开发
支持两种开发方式:
ThinkAdmin 原生写法 - 传统 MVC 模式 TTH Admin 组件 - 动态构建列表、表单、详情,无需编写后台页面
支持的组件:
Grid - 数据列表组件(支持搜索、筛选、排序、操作按钮) Form - 表单组件(支持多种输入类型、验证、文件上传) Show - 详情展示组件
支持的表单字段:
Text(文本)、Textarea(文本域)、Number(数字) Select(下拉选择)、SelectInfo(联动选择)、Checkbox(复选框) Date(日期)、Switch(开关) Image(图片)、MultipleImage(多图)、Editor(富文本) Hidden(隐藏域)
多渠道支付
已集成支付渠道:
✅ 微信支付(V2/V3) ✅ 支付宝 ✅ 汇付(MotionPay) ✅ 杉德(SandPay) ✅ Adapay ✅ 通联支付(AllinPay) ✅ 余额支付 ✅ 优惠券支付
支付接口统一:
interface PayInterface {
public function create($orderId, $payPrice, $successAction, $subject, $options);
public function refund($outTradeNo, $options);
public function query($orderId, $options);
public function merchantPay($openid, $orderId, $amount, $options);
public function handleNotify();
}
扩展简单,仅需继承支付接口,编写支付类,就可直接调用。
多应用登录凭证
✅ 临期凭证自动续期,在请求结果中返回新凭证 ✅ 可创建多应用凭证,实现账号多端同时登录 ✅ 支持 JWT Token 认证
MQTT 协议支持
基于 workerman 的 MQTT 协议实例:
支持 MQTT 客户端和服务器推送/订阅消息 支持守护进程方式运行 配合 EMQ X 可视化面板使用
多语言支持
数据库查询、API 数据返回多语言支持:
简体中文(zh-cn) 繁体中文(zh-tw) 英语(en-us) 日语(ja-jp)
使用方式:
前端通过 header 中的 lang参数指定语言数据库字段自动映射(如: name→tw_name、us_name)模型继承 LangModel,配置langField()方法
自动生成代码
通过命令行快速生成 API 控制器、数据仓库、模型:
# 创建完整三层文件
php think tth:CreateApi api@demo/Test
# 创建指定层文件
php think tth:CreateApi api@demo/Test --only models-repositories
# 使用 app 目录
php think tth:CreateApi api@demo/Test --use true
定时任务
支持定时任务和异步任务:
定时任务配置: config/console.php异步任务配置: app/*/sys.php
项目结构
├─ app 应用目录
│ ├─ admin 后台管理模块(ThinkAdmin)
│ │ ├─ controller 控制器
│ │ │ ├─ api API 接口
│ │ │ ├─ Auth.php 权限管理
│ │ │ ├─ Config.php 系统配置
│ │ │ ├─ File.php 文件管理
│ │ │ ├─ Index.php 后台首页
│ │ │ ├─ Login.php 登录管理
│ │ │ ├─ Menu.php 菜单管理
│ │ │ ├─ Module.php 模块管理
│ │ │ ├─ Oplog.php 操作日志
│ │ │ ├─ Queue.php 队列管理
│ │ │ └─ User.php 用户管理
│ │ └─ view 视图模板
│ ├─ api API 接口模块
│ │ ├─ controller 控制器
│ │ │ ├─ DemoController.php 示例接口
│ │ │ ├─ LoginController.php 登录接口
│ │ │ ├─ PayController.php 支付接口
│ │ │ ├─ PublicController.php 公共接口
│ │ │ ├─ UploadController.php 上传接口
│ │ │ └─ WechatController.php 微信接口
│ │ └─ route 路由配置
│ ├─ data 数据模块(会员专有)
│ │ ├─ command 定时任务
│ │ ├─ controller 控制器
│ │ ├─ model 模型
│ │ └─ service 服务层
│ ├─ index 后台业务模块
│ │ ├─ command 定时任务
│ │ ├─ controller 控制器
│ │ │ ├─ AdminDemo.php 后台组件示例
│ │ │ ├─ ConfigManage.php 配置管理
│ │ │ ├─ Demo.php 示例
│ │ │ ├─ ManageDemo.php 管理示例
│ │ │ ├─ ProjectManage.php 项目管理
│ │ │ └─ UserManage.php 用户管理
│ │ └─ view 视图模板
│ ├─ wechat 微信模块
│ │ ├─ command 定时任务
│ │ ├─ controller 控制器
│ │ ├─ model 模型
│ │ └─ service 服务层
│ ├─ lang 多语言配置
│ ├─ listener 事件监听
│ ├─ models 公共模型
│ ├─ repositories 公共数据仓库
│ └─ utils 工具类
├─ config 配置文件
│ ├─ app.php 应用配置
│ ├─ cache.php 缓存配置
│ ├─ console.php 定时任务配置
│ ├─ database.php 数据库配置
│ ├─ pay.php 支付配置
│ └─ route.php 路由配置
├─ tth TTH 核心框架
│ ├─ admin 后台组件
│ │ ├─ form 表单组件
│ │ ├─ grid 列表组件
│ │ ├─ show 详情组件
│ │ ├─ resources 资源模板
│ │ └─ support 辅助类
│ ├─ basic 基类
│ │ ├─ BaseCommand.php 命令行基类
│ │ ├─ BaseController.php 控制器基类
│ │ ├─ BaseRepository.php 数据仓库基类
│ │ ├─ BaseService.php 服务基类
│ │ ├─ BaseManager.php 驱动基类
│ │ └─ BaseStorage.php 驱动仓库基类
│ ├─ command 命令行
│ │ └─ CreateApi.php 生成API文件命令
│ ├─ exceptions 异常处理
│ │ ├─ AdminException.php 后台异常
│ │ ├─ ApiException.php API异常
│ │ ├─ ExceptionHandle.php 异常处理器
│ │ └─ PayException.php 支付异常
│ ├─ middleware 中间件
│ │ └─ api
│ │ ├─ AuthTokenMiddleware.php Token认证中间件
│ │ └─ BlockerMiddleware.php 防抖中间件
│ ├─ services 服务类
│ │ ├─ api 第三方SDK
│ │ │ ├─ AliyunSmsServices.php 阿里云短信
│ │ │ ├─ TencentSmsServices.php 腾讯云短信
│ │ │ ├─ BaiduServices.php 百度服务
│ │ │ ├─ BankCardServices.php 银行卡服务
│ │ │ ├─ BarcodeServices.php 条码识别
│ │ │ └─ WorkWechatServices.php 企业微信
│ │ ├─ image 图片服务
│ │ │ ├─ BarCodeServices.php 条码生成
│ │ │ ├─ ImageServices.php 图片处理
│ │ │ └─ WaterMarkServices.php 海报水印
│ │ ├─ lang 多语言服务
│ │ ├─ mqtt MQTT服务
│ │ ├─ pay 支付服务
│ │ │ ├─ extend 扩展支付渠道
│ │ │ ├─ storage 支付实现
│ │ │ ├─ BasePay.php 支付基类
│ │ │ ├─ Pay.php 支付管理
│ │ │ └─ PayInterface.php 支付接口
│ │ ├─ redis Redis服务
│ │ ├─ CacheServices.php 缓存服务
│ │ ├─ JwtAuthServices.php JWT服务
│ │ ├─ SysConfigServices.php 配置服务
│ │ └─ UploadFileServices.php 文件上传服务
│ ├─ traits Trait
│ │ ├─ Macroable.php 动态添加方法
│ │ ├─ ModelTrait.php 模型Trait
│ │ └─ RepositoryTrait.php 数据仓库Trait
│ ├─ utils 工具类
│ │ ├─ Address.php 位置地址
│ │ ├─ Code.php 数字编码
│ │ ├─ Hook.php 动态钩子
│ │ ├─ HttpCurl.php HTTP请求
│ │ ├─ RsaPwd.php RSA加解密
│ │ ├─ SendMail.php 发送邮件
│ │ ├─ SnowFlake.php 雪花算法
│ │ ├─ TokenAuth.php 短Token
│ │ ├─ ValidateHelper.php 数据验证
│ │ └─ XlsxSpread.php 导入导出
│ ├─ Json.php JSON响应
│ └─ Request.php 请求处理
├─ uniapp Uniapp 前端项目
│ ├─ api API接口
│ ├─ components 组件
│ ├─ config 配置
│ ├─ pages 页面
│ ├─ static 静态资源
│ └─ uni_modules uniapp模块
├─ md 文档目录
├─ .example.env 环境配置示例
└─ composer.json Composer配置
安装指南
环境要求
Nginx / Apache PHP >= 8.0 MySQL >= 5.7 Redis >= 2.0
安装步骤
安装依赖
composer install
配置环境
# 复制环境配置文件
copy .example.env .env
# 自行修改 .env 文件中数据库和Redis等配置信息
导入数据库
导入 md 目录下的 SQL 文件
配置 Nginx 伪静态
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
访问地址
后台地址:
http://www.xx.com/admin账号: tth888密码: tth888..API地址:
http://www.xx.com/api后台表单生成器:
http://www.xx.com/curd/index.html
开发指南
创建 API 接口
# 创建完整三层
php think tth:CreateApi api@user/User
# 生成文件:
# - app/api/controller/user/UserController.php
# - app/repositories/user/User.php
# - app/models/user/User.php
控制器开发
<?php
namespaceapp\api\controller;
usetth\basic\BaseController;
useapp\repositories\UserRepository;
class UserController extends BaseController
{
protected $repository;
publicfunction __construct(UserRepository $repository)
{
$this->repository = $repository;
}
publicfunction index()
{
try {
$list = $this->repository->selectList([]);
return$this->success('获取成功', $list);
} catch (\Exception $e) {
return$this->fail($e->getMessage());
}
}
}
数据仓库开发
<?php
namespace app\repositories;
use tth\basic\BaseRepository;
use app\models\User;
class UserRepository extends BaseRepository
{
public function __construct(User $model)
{
parent::__construct($model);
}
}
后台快速开发
<?php
namespaceapp\index\controller;
usethink\admin\Controller;
usetth\admin\Grid;
usetth\admin\Form;
class UserManage extends Controller
{
protected $table = 'user';
publicfunction index()
{
Grid::make($this->table, function (Grid $grid) {
$grid->column('id', 'ID')->sortable();
$grid->column('name', '姓名');
$grid->column('phone', '手机号');
$grid->column('created_at', '创建时间');
$grid->quickSearch('name', 'phone');
$grid->enableDialog();
});
}
publicfunction form()
{
Form::make($this->table, function (Form $form) {
$form->text('name', '姓名')->required();
$form->text('phone', '手机号')->required();
$form->image('avatar', '头像');
$form->number('age', '年龄');
});
}
}
支付开发
<?php
usetth\services\pay\Pay;
// 创建支付
$pay = Pay::wechat();
$result = $pay->create(
$orderId, // 订单号
$payPrice, // 支付金额
$successAction, // 回调方法
$subject, // 支付描述
$options // 其他参数
);
// 查询订单
$result = $pay->query($orderId);
// 退款
$result = $pay->refund($outTradeNo, $options);
// 转账到零钱
$result = $pay->merchantPay($openid, $orderId, $amount, $options);
多语言开发
模型配置:
<?php
namespace app\models;
use tth\services\lang\LangModel;
class News extends LangModel
{
public function langField()
{
return ['title', 'content'];
}
}
查询使用:
// 自动根据语言查询对应字段
$news = News::where(['id' => 1])->find();
// 指定语言查询
$news = News::lang('ja-jp')->where(['id' => 1])->find();
常见问题
无法访问 tth 命名空间
# 执行
composer dump-autoload
Composer 报错
# 使用示例配置文件
copy .example.composer.json composer.json
copy .example.composer.lock composer.lock
# 删除 vendor 并重新安装
rd /s /q vendor
composer install
数据库断线重连
常驻进程(如 MQTT)可能遇到数据库断线问题:
解决方案:
开启 config/database.php中的break_reconnect配置
感谢大家阅读,个人观点仅供参考,欢迎在评论区发表不同观点。