# Server Agent — Sport Era 后端 ThinkPHP / likeadmin 多应用后台系统。**本模块是项目核心,定义 adminapi、api、定时任务、数据库模型与业务逻辑,其他端依赖此模块。** ## 技术栈 - **PHP** 8.x - **框架** ThinkPHP + likeadmin - **数据库** MySQL(库名 `sbnews`,表前缀 `la_`) - **缓存** Redis(ThinkPHP Cache facade) - **Web 服务** Nginx + PHP-FPM ## 项目结构 ```text app/ ├── adminapi/ # 后台管理 API → admin/ 消费 ├── api/ # 前台公开 API → uniapp/ + pc/ 消费 ├── common/ # 公共模型/服务/缓存/中间件/监听器/枚举 ├── command/ # 控制台命令与定时任务 ├── service/ # 公共服务封装 ├── common.php # 全局函数 ├── middleware.php # 全局中间件 └── event.php # 事件监听 config/ # 框架配置 route/ # 路由定义 public/ # Web 入口、上传目录、脚本与静态资源 ``` ## 模块职责 | 应用 | 路由前缀 | 消费方 | 控制器目录 | | -------- | ------------- | --------------- | -------------------------- | | adminapi | `/adminapi/*` | admin/ 管理后台 | `app/adminapi/controller/` | | api | `/api/*` | uniapp/ + pc/ | `app/api/controller/` | ## 目录约定 - `controller/` — 控制器(类名后缀 `Controller`) - `logic/` — 业务逻辑层 - `service/` — 服务层 - `validate/` — 验证器层 - `lists/` — 列表查询封装 - `model/` — ORM 模型 - `cache/` — Redis 缓存 - `http/middleware/` — 中间件 ## 运行命令 ```bash composer install php think run php think crontab ``` --- ## 并行协作协议 ### 新功能开发流程 ```text Step 1: 后端定义契约 1.1 确认是否已有数据表、模型、字典或配置可复用 1.2 创建或调整 Model / Logic / Validate / Lists / Controller 1.3 输出接口清单: ## 新功能: XXX ### adminapi 接口 | 方法 | 路径 | 说明 | | GET | /adminapi/xxx/lists | 列表 | | POST | /adminapi/xxx/add | 新增 | | POST | /adminapi/xxx/edit | 编辑 | | POST | /adminapi/xxx/del | 删除 | ### api 接口 | 方法 | 路径 | 说明 | | GET | /api/xxx/lists | 前台列表 | | GET | /api/xxx/detail | 前台详情 | Step 2: 前端并行消费契约 ┌─ server/ 实现 controller + logic + validate + lists ├─ admin/ 查看 adminapi controller → 写管理页面 ├─ uniapp/ 查看 api controller → 写手机端页面 └─ pc/ 查看 api controller → 写 PC 页面 Step 3: 集成联调与文档同步 - 检查接口响应格式、权限、字段、字典 - 同步更新 `业务进度管理.md` ``` ## 与前端 Agent 的协作方式 1. **API 契约即文档**:前端优先查看 controller、validate、logic 获取接口签名、请求参数、响应结构。 2. **Model 即数据结构**:前端查看 `app/common/model/` 了解字段与访问器。 3. **枚举共享**:业务枚举优先使用字典表或配置表,不在 PHP / TS 中重复硬编码。 4. **上传接口统一**:后台使用 adminapi 上传接口,前台使用 api 上传接口,沿用现有封装。 ## 后端开发硬性规范 1. **字典/配置驱动枚举**:状态、类型、分类、开关等优先落入字典表或配置表。 2. **列表查询沿用 Lists 封装**:后台列表页继承 `BaseAdminDataLists`,实现 `lists()` 和 `count()`。 3. **控制器沿用基类能力**:后台控制器继承 `BaseAdminController`,列表使用 `$this->dataLists()`。 4. **菜单与权限**:新增管理后台模块必须同步菜单和按钮权限,SQL 初始化必须幂等。 5. **接口响应格式**:沿用 likeadmin 统一响应结构,不随意增减顶层字段。 6. **时间字段处理**:BaseModel 自动转换 `create_time` / `update_time`,不要对已转字符串再次 `date()`。 7. **SQL 保留字**:原生 SQL 中 `system`、`order`、`group`、`key` 等字段必须用反引号包裹。 8. **定时任务**:注册在 `la_dev_crontab`,通过 `php think crontab` 统一调度。 ## 近期踩坑 - `Validate::only()` 只限制校验字段范围,不会自动过滤请求参数;新增字段要同时检查 validate、logic、model、保存白名单和数据库列。 - `adminapi/match.match/edit` 保存失败时,先确认测试库或线上库 `la_match` 是否真的已补上目标字段,测试库缺列会直接导致写入失败。