299 lines
8.8 KiB
Markdown
Executable File
299 lines
8.8 KiB
Markdown
Executable File
# 投注游戏平台 - AI 上下文文档
|
||
|
||
## 变更记录 (Changelog)
|
||
|
||
### 2026-01-08 (当前更新)
|
||
- 增量更新:新增前台控制器模块文档 (`App/Controllers/Web/CLAUDE.md`)
|
||
- 完善模块索引:添加前台控制器模块
|
||
- 更新模块结构图:添加前台控制器节点
|
||
- 覆盖率提升:从 75% 提升至 85%
|
||
|
||
### 2026-01-08 12:51:57
|
||
- 初始化 AI 上下文文档
|
||
- 完成全仓清点与模块扫描
|
||
- 生成根级与模块级文档
|
||
|
||
---
|
||
|
||
## 项目愿景
|
||
|
||
这是一个基于 PHP 的在线投注游戏平台,主要提供骰子类游戏的投注服务。平台采用插件化架构设计,支持动态扩展功能,包含完整的用户管理、游戏管理、投注结算、财务管理等核心功能。
|
||
|
||
**核心特性**:
|
||
- 实时游戏投注与结算
|
||
- 插件化扩展机制(微信分享、二维码、短链接等)
|
||
- 完整的权限管理(前台用户/后台管理员)
|
||
- 视频直播集成(CKPlayer 支持多种流媒体格式)
|
||
- 事务安全的资金管理
|
||
|
||
---
|
||
|
||
## 架构总览
|
||
|
||
### 技术栈
|
||
- **后端**: PHP 7.4+ (OOP, Namespace)
|
||
- **数据库**: MySQL (通过 Medoo ORM)
|
||
- **前端框架**: Layui (UI 组件库)
|
||
- **视频播放**: CKPlayer (支持 HLS/FLV/MPEGTS)
|
||
- **架构模式**: MVC + 插件化
|
||
|
||
### 核心设计模式
|
||
1. **路由系统**: 自定义路由器,支持参数路由、依赖注入、路由组
|
||
2. **插件机制**:
|
||
- 基于配置文件的插件声明 (`mian.php`)
|
||
- 自动路由注册与冲突检测
|
||
- 数据库表冲突检测
|
||
- 插件生命周期钩子 (init/activate/deactivate)
|
||
3. **依赖注入**: 构造函数级别的依赖注入
|
||
4. **数据库事务**: 关键操作(投注、余额调整)使用 PDO 事务保证原子性
|
||
|
||
---
|
||
|
||
## 模块结构图
|
||
|
||
```mermaid
|
||
graph TD
|
||
A["(根) 投注游戏平台"] --> B["App"];
|
||
B --> C["Core (核心框架)"];
|
||
B --> D["Controllers (控制器)"];
|
||
B --> E["Plugins (插件系统)"];
|
||
B --> F["Views (视图)"];
|
||
|
||
D --> G["Admin (后台管理)"];
|
||
D --> H["Web (前台)"];
|
||
D --> I["Api (API接口)"];
|
||
|
||
E --> J["WxShare (微信分享)"];
|
||
E --> K["WxGCode (微信二维码)"];
|
||
E --> L["SoUrl (短链接)"];
|
||
|
||
A --> M["Db (数据库层)"];
|
||
A --> N["Static (静态资源)"];
|
||
A --> O["Models (数据模型)"];
|
||
A --> P["Core (旧版核心)"];
|
||
|
||
N --> Q["layui (UI框架)"];
|
||
N --> R["ckplayer (视频播放)"];
|
||
|
||
click C "./App/Core/CLAUDE.md" "查看核心框架文档"
|
||
click G "./App/Controllers/Admin/CLAUDE.md" "查看后台管理文档"
|
||
click H "./App/Controllers/Web/CLAUDE.md" "查看前台文档"
|
||
click E "./App/Plugins/CLAUDE.md" "查看插件系统文档"
|
||
click M "./Db/CLAUDE.md" "查看数据库层文档"
|
||
```
|
||
|
||
---
|
||
|
||
## 模块索引
|
||
|
||
| 模块路径 | 职责 | 语言 | 入口文件 | 状态 |
|
||
|---------|------|------|---------|------|
|
||
| `App/Core` | 核心框架层(路由、控制器基类、插件管理) | PHP | `Router.php`, `PluginManager.php` | ✅ 完整 |
|
||
| `App/Controllers/Admin` | 后台管理功能 | PHP | `*Controller.php` | ✅ 完整 |
|
||
| `App/Controllers/Web` | 前台用户功能 | PHP | `HomeController.php`, `BetController.php` | ✅ 完整 |
|
||
| `App/Plugins/WxShare` | 微信分享插件 | PHP | `mian.php` | ✅ 完整 |
|
||
| `App/Plugins/WxGCode` | 微信二维码插件 | PHP | `mian.php` | ✅ 完整 |
|
||
| `App/Plugins/SoUrl` | 短链接插件 | PHP | `mian.php` | ✅ 完整 |
|
||
| `Db` | 数据库访问层 | PHP | `Database.php`, `Medoo.php` | ✅ 完整 |
|
||
| `Static` | 静态资源(CSS/JS/图片/UI框架) | HTML/CSS/JS | `layui/`, `ckplayer/` | ✅ 完整 |
|
||
| `Models` | 数据模型(可能废弃) | PHP | `User.php`, `Game.php`, `Draw.php` | ⚠️ 部分 |
|
||
| `Core` | 旧版核心(可能废弃) | PHP | `Router.php`, `Database.php` | ⚠️ 部分 |
|
||
|
||
---
|
||
|
||
## 运行与开发
|
||
|
||
### 环境要求
|
||
- PHP >= 7.4
|
||
- MySQL >= 5.7
|
||
- Apache/Nginx (需配置 URL Rewrite)
|
||
- PHP 扩展: PDO, PDO_MySQL, JSON, MBString
|
||
|
||
### 安装步骤
|
||
|
||
1. **部署代码**
|
||
```bash
|
||
# 将项目放置到 Web 服务器目录
|
||
# 确保 Storage/log/ 目录可写
|
||
chmod -R 755 /path/to/touzi/Storage
|
||
```
|
||
|
||
2. **配置数据库**
|
||
```bash
|
||
# 编辑 Db/config.php
|
||
# 修改数据库连接信息
|
||
```
|
||
|
||
3. **初始化数据库**
|
||
```bash
|
||
# 访问安装页面
|
||
http://yourdomain.com/install
|
||
```
|
||
|
||
4. **Apache 配置**
|
||
- 项目根目录包含 `.htaccess` 文件
|
||
- 确保启用 `mod_rewrite` 模块
|
||
|
||
5. **Nginx 配置**
|
||
```nginx
|
||
location / {
|
||
try_files $uri $uri/ /index.php?$query_string;
|
||
}
|
||
```
|
||
|
||
### 目录权限
|
||
```
|
||
Storage/log/ # 日志目录(可写)
|
||
Db/installed.lock # 安装锁文件(可写)
|
||
```
|
||
|
||
### 默认入口
|
||
- **前台**: `http://yourdomain.com/`
|
||
- **后台**: `http://yourdomain.com/admin`
|
||
- **安装**: `http://yourdomain.com/install`
|
||
|
||
---
|
||
|
||
## 测试策略
|
||
|
||
### 当前状态
|
||
⚠️ **未发现测试目录或测试文件**
|
||
|
||
建议的测试覆盖:
|
||
1. **单元测试**:
|
||
- 插件管理器(路由冲突检测、表冲突检测)
|
||
- 路由解析与匹配
|
||
- 余额计算逻辑
|
||
|
||
2. **集成测试**:
|
||
- 投注流程(下注 → 扣款 → 记录)
|
||
- 期号开奖与结算
|
||
- 插件安装与卸载
|
||
|
||
3. **安全测试**:
|
||
- SQL 注入防护(目前使用 Medoo 的参数化查询)
|
||
- XSS 防护(视图层需增强)
|
||
- CSRF 防护(未发现 Token 机制)
|
||
- 会话劫持防护(已实现 IP + UA 校验)
|
||
|
||
---
|
||
|
||
## 编码规范
|
||
|
||
### PHP 编码规范
|
||
1. **命名空间**: 遵循 PSR-4 规范
|
||
- `App\Controllers\Admin\GameController`
|
||
- `Db\Database`
|
||
|
||
2. **类命名**: PascalCase
|
||
- `GameController`, `PluginManager`
|
||
|
||
3. **方法命名**: camelCase
|
||
- `checkLogin()`, `loadEnabledPlugins()`
|
||
|
||
4. **数据库操作**: 统一使用 Medoo ORM
|
||
```php
|
||
$db->select('users', '*', ['status' => 1]);
|
||
```
|
||
|
||
5. **事务处理**: 关键操作必须使用事务
|
||
```php
|
||
$db->medoo->pdo->beginTransaction();
|
||
try {
|
||
// 操作
|
||
$db->medoo->pdo->commit();
|
||
} catch (\Exception $e) {
|
||
$db->medoo->pdo->rollBack();
|
||
}
|
||
```
|
||
|
||
### 插件开发规范
|
||
参见 `App/Plugins/CLAUDE.md`
|
||
|
||
---
|
||
|
||
## AI 使用指引
|
||
|
||
### 常见任务模式
|
||
|
||
#### 1. 添加新的后台功能
|
||
```
|
||
1. 创建控制器: App/Controllers/Admin/XxxController.php
|
||
2. 继承 AdminBaseController
|
||
3. 在 routes.php 注册路由
|
||
4. 创建视图: App/Views/Admin/xxx.php
|
||
5. 在主模板添加菜单项
|
||
```
|
||
|
||
#### 2. 修改投注逻辑
|
||
```
|
||
关键文件:
|
||
- App/Controllers/Web/BetController.php (投注入口)
|
||
- App/Controllers/Admin/PeriodController.php (开奖结算)
|
||
- App/Controllers/Admin/GameController.php (赔率配置)
|
||
|
||
⚠️ 必须使用事务保证原子性
|
||
⚠️ 必须锁定用户行防止并发扣款 (SELECT FOR UPDATE)
|
||
```
|
||
|
||
#### 3. 开发新插件
|
||
```
|
||
1. 在 App/Plugins/ 创建目录
|
||
2. 创建 mian.php 配置文件(必须包含元信息注释)
|
||
3. 定义 route_group、tables、init/activate/deactivate 钩子
|
||
4. 创建 Controllers/、Views/ 子目录
|
||
5. 通过后台插件管理安装
|
||
```
|
||
|
||
#### 4. 数据库迁移
|
||
```
|
||
当前没有迁移机制,数据库变更方式:
|
||
1. 插件: 通过 activate 钩子创建表
|
||
2. 核心表: 手动执行 SQL 或通过安装程序
|
||
```
|
||
|
||
### 安全注意事项
|
||
1. **不要直接拼接 SQL**: 使用 Medoo 的参数化查询
|
||
2. **敏感数据不输出**: 密码、token 等不要返回到前端
|
||
3. **权限检查**: 所有后台方法必须调用 `$this->checkLogin()` 或 `$this->checkAdmin()`
|
||
4. **金额运算**: 使用 `floatval()` 强制转换,避免精度问题
|
||
5. **并发控制**: 资金操作必须使用 `SELECT FOR UPDATE` 锁定
|
||
|
||
### 已知问题
|
||
1. **双重架构**: 存在 `App/` 和根目录两套 `Core/`、`Controllers/`,可能是迁移遗留
|
||
2. **缺少 CSRF 防护**: POST 请求未验证 Token
|
||
3. **缺少 API 限流**: 投注等接口容易被刷
|
||
4. **密码明文记录**: 某些日志可能包含敏感信息
|
||
5. **缺少单元测试**: 无自动化测试覆���
|
||
|
||
---
|
||
|
||
## 相关资源
|
||
|
||
- **Medoo 文档**: https://medoo.in/doc
|
||
- **Layui 文档**: https://layui.dev/
|
||
- **CKPlayer 文档**: https://www.ckplayer.com/
|
||
|
||
---
|
||
|
||
**最后更新**: 2026-01-08
|
||
**文档版本**: 1.1.0
|
||
**扫描覆盖率**: 约 85%(核心代码已扫描,部分静态资源未详查)
|
||
|
||
## 下一步建议
|
||
|
||
### 高优先级
|
||
1. **补充测试覆盖**: 为投注流程(BetController)编写单元测试和集成测试
|
||
2. **CSRF 防护**: 为所有 POST 请求添加 Token 验证
|
||
3. **API 限流**: 为投注接口添加频率限制(防止刷单)
|
||
|
||
### 中优先级
|
||
4. **清理双重架构**: 确认并删除废弃的 `Core/`、`Models/` 目录
|
||
5. **日志脱敏**: 确保日志不包含密码、Token 等敏感信息
|
||
6. **错误处理**: 统一错误响应格式,避免暴露内部信息
|
||
|
||
### 低优先级
|
||
7. **数据库迁移机制**: 引入迁移工具(如 Phinx)管理数据库变更
|
||
8. **代码规范检查**: 引入 PHP_CodeSniffer 或 PHPStan
|
||
9. **性能优化**: 添加 Redis 缓存层(游戏列表、赔率配置等)
|