--- 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`