From 46f0d6285266b267c9fd75c265539d2272217ec2 Mon Sep 17 00:00:00 2001 From: augushong Date: Sun, 19 Jul 2026 00:30:05 +0800 Subject: [PATCH] =?UTF-8?q?docs(rules):=20=E6=96=B0=E5=A2=9E=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=BA=A7=E8=A6=86=E7=9B=96=E6=9C=BA=E5=88=B6=E8=A7=84?= =?UTF-8?q?=E5=88=99=E5=B9=B6=E4=BF=AE=E6=AD=A3=E7=B4=A2=E5=BC=95=E8=81=8C?= =?UTF-8?q?=E8=B4=A3=E4=BA=92=E6=96=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 ulthon-file-override-mechanism.md:阐述 app/ 覆盖 extend/base/ 的三类机制(视图模板、include 标签、app_file_path)与不支持覆盖的反例清单 - ulthon-base-app-architecture:升格原孤立描述为独立小节"5. 文件级覆盖机制" - ulthon-timer:在 app_file_path 覆盖说明处增加规则引用 - AGENTS.md:登记新规则到框架内置规则索引 - ulthon-rules-manager:修订索引职责(AGENTS.md 仅 ulthon-、PROJECT.md 仅 project-,互斥不重复维护);索引格式从 4 列改为 3 列与项目实际一致;维护规则补充对称约束;泛化"迁移现有内容"章节 --- .../rules/ulthon-file-override-mechanism.md | 94 +++++++++++++++++++ .../ulthon-base-app-architecture/SKILL.md | 13 ++- .agents/skills/ulthon-rules-manager/SKILL.md | 34 ++++--- .agents/skills/ulthon-timer/SKILL.md | 2 + AGENTS.md | 1 + 5 files changed, 130 insertions(+), 14 deletions(-) create mode 100644 .agents/rules/ulthon-file-override-mechanism.md diff --git a/.agents/rules/ulthon-file-override-mechanism.md b/.agents/rules/ulthon-file-override-mechanism.md new file mode 100644 index 0000000..ee138b7 --- /dev/null +++ b/.agents/rules/ulthon-file-override-mechanism.md @@ -0,0 +1,94 @@ +# 文件级覆盖机制(app/ 覆盖 extend/base/) + +> 来源:框架内置(ulthon-) +> 作用域:所有"框架默认文件 → 业务同名文件"的覆盖场景(视图模板、include 标签、`app_file_path()` 加载的 PHP/配置/模板) +> 触发条件:需要替换框架内置视图/模板/跳转页/异常页/定时任务配置/CURD 模板/版本升级钩子时加载 + +## 规则内容 + +### 概述 + +Ulthon Admin 在"类继承覆盖"之外,还提供"文件级覆盖"能力:业务侧在 `app/` 下放置与 `extend/base/` 同路径、同名的文件,框架运行时会优先加载 app 版本。 + +该机制只对**特定类型**的文件生效,不是所有文件都支持。覆盖能力分三类: + +- 机制一:视图模板覆盖(最核心、最隐蔽,控制器 `fetch()` 自动生效) +- 机制二:模板内 `{include}` 标签覆盖(与机制一同源) +- 机制三:`app_file_path()` 辅助函数显式覆盖(需调用方主动使用) + +### 机制一:视图模板覆盖 + +- 实现位置:`extend/think/view/driver/Think.php:160-257` 的 `parseTemplate()` 方法 +- 不走 `app_file_path`,由视图驱动自身完成三级回退查找: + 1. `app//view/