Files

299 lines
8.8 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 投注游戏平台 - 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 缓存层(游戏列表、赔率配置等)