docs: 重构项目规则与技能文档结构并更新开发指南

This commit is contained in:
augushong
2026-02-01 13:13:03 +08:00
parent 180d9291a3
commit 28267ff1c0
8 changed files with 272 additions and 107 deletions

View File

@@ -0,0 +1,28 @@
---
name: "ulthon-auth-session-token"
description: "解释并指导 Session+Token 登录认证的使用方式。需要实现接口鉴权或联调移动端请求时调用。"
---
# 登录认证Session + Token
## 何时调用
- 编写/联调需要登录态的接口。
- 需要在非浏览器环境(移动端、小程序、跨域脚本)调用后台接口。
## 机制概览
- Session主要用于浏览器环境依赖 Cookie。
- Token用于接口与无 Cookie 场景,通过 Header 传递完成认证。
## 使用方式
1. 登录成功后,接口会返回 `token` 数据。
2. 后续请求在 Header 携带:
```text
Authorization: Bearer <token>
```
3. 系统会自动识别并完成身份认证。

View File

@@ -0,0 +1,33 @@
---
name: "ulthon-core-extend-pattern"
description: "指导如何在不修改 extend/base 的前提下扩展功能。需要新增/改造框架内置能力(权限、菜单、管理员等)时调用。"
---
# 核心层扩展模式(继承与重写)
## 何时调用
- 需要修改或扩展框架内置模块(如管理员、菜单、权限、上传等)行为。
- 看到代码位于 `extend/base/`,但业务需要调整其逻辑或返回数据。
## 必须遵守
- 不修改 `extend/base/` 下任何文件。
- 业务实现放在 `app/` 下,并通过继承覆盖 base 层实现。
- 所有调用从 `app/` 下入口类开始,不直接 new/调用 `extend/base/` 类。
## 推荐做法
1.`extend/base/` 找到对应基础类(通常以 `*Base.php` 结尾)。
2.`app/` 下找到或创建同职责的业务类(不带 Base 后缀),让其继承基础类。
3. 在业务类中重写需要变更的方法:
- 方法签名保持一致
- 能复用就 `parent::methodName()`,必要时复制父类逻辑后改造
4. 保持对外调用点不变:控制器/服务统一调用 `app/` 下的类。
## 示例定位思路
- 控制器:`extend/base/admin/controller/*/*Base.php``app/admin/controller/*/*.php`
- 模型:`extend/base/admin/model/*Base.php``app/admin/model/*.php`
- 服务:`extend/base/admin/service/*Base.php``app/admin/service/*.php`

View File

@@ -0,0 +1,35 @@
---
name: "ulthon-db-tools-debug"
description: "封装 tools:db 命令的使用方法。需要快速查询/执行 SQL 或查看表信息进行调试时调用。"
---
# 内置数据库调试命令tools:db
## 何时调用
- 需要快速查看数据、验证 SQL、检查表结构字段/索引/行数)用于排错。
- 需要在不写临时代码的情况下做一次性查询或数据检查。
## 必须注意
- 这些命令用于“调试数据”,不要用来“设计表结构”。
- 如果为了排错临时改了表结构或数据,需要在任务结束前确保影响可控并记录变更点。
## 常用命令
```bash
php think tools:db:query
php think tools:db:execute
php think tools:db:table
php think tools:db:count
php think tools:db:info
php think tools:db:desc
```
通过 `--help` 查看每个命令参数说明。
## 使用建议
- 优先用 `query/desc/info/table/count` 做只读检查。
- 需要变更数据时再用 `execute`,并尽量将变更限制在最小范围。

View File

@@ -0,0 +1,32 @@
---
name: "ulthon-page-api-dual-mode"
description: "指导控制器实现“页面/接口同体”。需要同一路由同时返回 HTML 与 JSON 时调用。"
---
# 页面 / 接口同体Controller Dual Mode
## 何时调用
- 希望同一个控制器方法既能渲染页面HTML也能作为接口返回 JSON。
- 需要让现有页面接口在移动端/脚本调用时返回结构化数据。
## 触发与认证
- 触发:请求头 `Accept` 包含 `application/json`
- 认证Header 传 `Authorization: Bearer <tokenContent>`
## 实现要点
- 控制器方法必须调用 `$this->fetch()`,不要使用 `View::fetch()`
- 无论使用 `$this->assign()` 还是 `View::assign()`,其数据都会被转换为 JSON 返回。
- 若不希望某个 assign 字段出现在 JSON 中,可使用:
```php
$this->assign('name', 'value', -1);
```
## 特殊行为
- `index` 方法 GET 默认返回分页数据;如果需要返回 assign 数据URL 增加参数 `get_page_data=1`
- 仅在控制器模式Controller Mode生效路由模式Route Mode不生效。

View File

@@ -0,0 +1,75 @@
---
name: "ulthon-scheme-curd-workflow"
description: "指导使用 Scheme 与 CURD 的标准开发流程。需要新增/调整表结构并生成模块基础代码时调用。"
---
# Scheme + CURD 标准工作流
## 何时调用
- 新增业务表、调整字段、补充索引/注释,并希望保持“代码 <-> 数据库”一致。
- 准备生成控制器/模型/视图等基础 CRUD 代码。
## 关键原则
- CURD 生成前Scheme 与数据库表结构必须完全一致,否则会被拒绝。
- 业务 Scheme 代码统一放在 `app/admin/scheme/`
- 表结构设计遵循项目数据库规范:表名小写下划线、字段注释完整、避免 ENUM。
- 一旦你开始在生成代码上做业务改造,就应默认“正式目录不可被覆盖”,后续结构变更需要走“临时生成 + 按需合并”。
## 推荐流程
### A. 以代码为准(推荐)
1.`app/admin/scheme/` 新建或修改对应表的 Scheme 类。
2. 执行同步,将代码结构同步到数据库:
```bash
php think scheme:sync
```
3. 生成 CURD先生成到临时目录确认更稳妥
```bash
php think curd -t {table} -r
```
4. 初次接入(代码还未做业务改造)可选择正式生成或覆盖:
```bash
php think curd -t {table}
php think curd -t {table} -f
```
### A2. 已经做过业务改造时的推荐做法(临时生成 + 按需合并)
适用场景:你已经修改过 CURD 生成的控制器/模型/视图/JS 等代码,此时再次 `-f` 覆盖会丢失业务改动。
1. 先完成结构同步(`scheme:sync``scheme:make`),确保与数据库一致。
2. 始终生成到临时目录:
```bash
php think curd -t {table} -r
```
3. 对比临时目录与正式目录的差异,仅把“新增字段/新增校验/新增表单项/新增列表列”等结构性变更按需合并回正式代码。
4. 合并后再做一次功能自测,重点验证新增字段的新增/编辑/列表/详情与校验链路。
### B. 以数据库为准
1. 在数据库中创建/修改表结构。
2. 反向生成 Scheme 代码:
```bash
php think scheme:make -t {table}
```
3. 再执行 CURD
```bash
php think curd -t {table} -r
```
## 交互提示
- 命令行工具通常支持 `--force-force``-ff`)跳过交互确认。