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/