后端架构
项目概述
EBAOZU 多门店 V4,基于 CRMEB 二次开发的多门店电商平台。
- 后端:ThinkPHP 8.0 + Swoole 4,PHP 8.0+
- 前端:Admin(
view/admin)、Store(view/store)、Uniapp(view/uniapp) - V3 代码保留在
ebaozu_v3/作为迁移参考,V4 数据库文件位于ebaozu_v3/ebaozu_v4.sql
技术栈
| 技术 | 版本/说明 |
|---|---|
| Swoole | 4.0.10(topthink/think-swoole) |
| ThinkPHP ORM | 3.0 |
| Think Queue | 3.0 |
| MySQL | >= 8.0 |
| Redis | 缓存、队列、WebSocket Room |
| 支付宝 | Alipay EasySDK 2.2 |
| web后台 | vue2.6 + Element UI |
| 移动端 | Vue 2 + Uni-app |
项目结构
app/
controller/ # 控制器(按 admin/api/store/cashier/supplier/kefu 分目录)
services/ # 业务逻辑层
dao/ # 数据访问层
model/ # ORM 模型
jobs/ # 队列任务
listener/ # 事件监听器
validate/ # 验证器(按子域分目录)
websocket/ # WebSocket 处理器
Request.php # 自定义请求类(注入鉴权上下文)
ExceptionHandle.php # 全局异常处理
crmeb/
basic/ # BaseController、BaseModel 等基类
services/ # 共享服务(上传、微信、短信、打印、快递等)
traits/ # 可复用 Trait
utils/ # 工具类
route/
admin.php # /adminapi/*
api.php # /api/*(移动端)
store.php # /storeapi/*严格分层
Controller → Services → DAO → Model禁止绕过任何一层。数据组装在 Services 层,Model 只写搜索条件。
关键基类
| 基类 | 说明 |
|---|---|
crmeb\basic\BaseController | 所有控制器基类(被 swoole_loader 加密) |
app\services\BaseServices | 服务层基类(分页、事务) |
app\dao\BaseDao | DAO 基类(需实现 setModel()) |
crmeb\basic\BaseModel | ORM 模型基类 |
路由
ThinkPHP 路由注解已禁用,所有路由显式定义于 route/ 各文件。
请求处理
使用 app\Request 的 getMore() / postMore() 提取参数:
php
[$name, $status] = $request->postMore([
'name',
['status', 1], // 带默认值
], true); // true = 一维数组(方便解构)API 响应
php
return app('json')->success('消息', $data);
return app('json')->fail('消息', $data);
throw new \app\exceptions\AuthException('错误信息', 400); // 由 ExceptionHandle 统一捕获依赖注入
php
use think\annotation\Inject;
#[Inject]
protected LoginServices $services;验证
php
validate(\app\validate\api\LoginValidate::class)->check($data);队列与事件
- 队列:
app/jobs/(继承crmeb\basic\BaseJobs) - 事件监听:
app/listener/ - 事件定义:
app/event.php
前端子系统
| 子系统 | 路径 | API 前缀 |
|---|---|---|
| 总后台 | view/admin | /adminapi |
| 门店后台 | view/store | /storeapi |
| 移动端 | view/uniapp | /api |