docs: 强化经验#4 — 插件视图路径 view/{group}/ 结构图解,防止 admin/view/ vs view/admin/ 顺序颠倒

feat/b-verification-clean
Council 2026-04-25 19:46:12 +08:00
parent 51bcc207fb
commit 6fae406982
1 changed files with 32 additions and 4 deletions

View File

@ -67,7 +67,7 @@ if (!empty($category['is_enable']))
## 🟡 P1 — 严重问题 ## 🟡 P1 — 严重问题
### 4. 插件视图路径:必须用 `../../../plugins/插件名/view/...` ### 4. 插件视图路径:`../../../plugins/插件名/view/{group}/controller/action`
ShopXO 插件控制器继承 `app\admin\controller\Common` 后,模板引擎默认去找 `app/admin/view/default/` 而非插件目录。 ShopXO 插件控制器继承 `app\admin\controller\Common` 后,模板引擎默认去找 `app/admin/view/default/` 而非插件目录。
@ -75,11 +75,39 @@ ShopXO 插件控制器继承 `app\admin\controller\Common` 后,模板引擎默
// ❌ 错误:引擎截断路径 // ❌ 错误:引擎截断路径
return MyView('venue/list'); return MyView('venue/list');
// ✅ 正确:跨模块绝对路径 // ❌ 错误路径片段顺序颠倒admin/view/ vs view/admin/
return MyView('../../../plugins/vr_ticket/view/venue/list'); return MyView('../../../plugins/vr_ticket/admin/view/seat_template/list');
// ↑ admin/view/ 是错的
// 正确view/admin/ ↓
return MyView('../../../plugins/vr_ticket/view/admin/seat_template/list');
``` ```
**教训**:插件视图必须放在插件根目录的 `view/` 下(不是 `admin/view/`),且调用时加 `../../../plugins/插件名/view/...` 前缀。 **ShopXO 插件视图目录结构**(必须严格遵守):
```
app/plugins/vr_ticket/
├── admin/ ← 控制器目录PHP 类),不是视图目录!
│ └── Admin.php
├── view/ ← 视图文件根目录
│ ├── admin/ ← 后台视图group=admin
│ │ ├── seat_template/list.html
│ │ ├── seat_template/save.html
│ │ ├── ticket/list.html
│ │ ├── verifier/list.html
│ │ └── verification/list.html
│ ├── goods/ ← C端商品页视图
│ └── venue/ ← C端场馆视图
```
**完整路径公式**`../../../plugins/vr_ticket/view/{group}/{controller}/{action}`
| 场景 | group | 示例路径 |
|------|-------|---------|
| 后台管理 | `admin` | `../../../plugins/vr_ticket/view/admin/seat_template/list` |
| C端前台 | `goods` | `../../../plugins/vr_ticket/view/goods/ticket_detail` |
| C端场馆 | `venue` | `../../../plugins/vr_ticket/view/venue/list` |
**教训**:插件视图放在插件根目录的 `view/` 下(不是 `admin/view/`),路径公式 `../../../plugins/插件名/view/{group}/controller/action` 中的 `view/{group}/` 顺序不能颠倒。
--- ---