91 lines
3.3 KiB
Markdown
91 lines
3.3 KiB
Markdown
# 目录结构
|
||
|
||
YwxApp 采用 ThinkPHP 多应用模式,目录职责划分清晰。
|
||
|
||
## 顶层目录
|
||
|
||
```
|
||
ywxapp_dev/
|
||
├── app/ 应用目录(多应用模式)
|
||
├── addon/ 插件目录,每个子目录是一个独立插件
|
||
├── config/ 全局配置
|
||
├── docs/ 开发文档(本文档站的数据源)
|
||
├── extend/ 扩展类库(PSR-0)
|
||
├── public/ Web 根目录,入口文件与静态资源
|
||
├── route/ 全局路由定义
|
||
├── runtime/ 运行时缓存、日志、临时文件
|
||
├── templates/ 模板皮肤包
|
||
├── vendor/ Composer 依赖
|
||
└── ywxapp/ 框架核心库(PSR-4 命名空间 ywxapp\)
|
||
```
|
||
|
||
## app 应用目录
|
||
|
||
```
|
||
app/
|
||
├── api/ 对外 API 接口应用
|
||
├── backend/ 后台管理应用
|
||
├── member/ 会员中心应用
|
||
├── frontend/ 前台应用
|
||
├── site/ 展示官网 / 文档站应用
|
||
├── common.php 全局公共函数
|
||
├── event.php 全局事件定义与监听器注册
|
||
├── middleware.php 全局中间件
|
||
├── provider.php 容器绑定
|
||
└── service.php 服务注册(含 AppService)
|
||
```
|
||
|
||
> **注意**:多应用模式下 `base_path()` 返回的是 `app/` 目录而非项目根目录。
|
||
> 若需要扫描 `addon/`、`app/` 等顶层目录,必须使用 `root_path()`。
|
||
|
||
## addon 插件目录
|
||
|
||
单个插件的标准结构:
|
||
|
||
```
|
||
addon/<插件名>/
|
||
├── info.php 插件清单:name/title/intro/version/state
|
||
├── Addon.php 插件主类,继承 ywxapp\addon
|
||
├── config.php 插件配置项定义
|
||
├── menu.json 后台菜单定义
|
||
├── install.sql 安装 SQL
|
||
├── controller/
|
||
│ ├── backend/ 后台控制器(继承 AddonBackend)
|
||
│ ├── api/ 接口控制器
|
||
│ └── frontend/ 前台控制器
|
||
├── model/ 数据模型
|
||
├── service/ 业务服务
|
||
├── subscribe/ 事件订阅器(钩子实现)
|
||
├── route/app.php 插件路由(写相对组名,框架自动补前缀)
|
||
├── view/ 视图模板
|
||
└── docs/ 插件文档
|
||
```
|
||
|
||
## ywxapp 核心库
|
||
|
||
```
|
||
ywxapp/
|
||
├── command/ 自定义命令行工具
|
||
├── controller/ 控制器基类(Frontend / Backend / AddonBackend / Api)
|
||
├── library/ 工具类库(SchemaGuard / SkinOverlay / Markdown 等)
|
||
├── middleware/ 框架中间件(MultiApp / AddonPerformance 等)
|
||
├── service/ 核心服务(AppService / AddonService)
|
||
├── addon.php 插件基类
|
||
└── helper.php 全局辅助函数
|
||
```
|
||
|
||
## 路由约定
|
||
|
||
由于 `MultiApp` 中间件会将 URL 首段解析为应用名,因此:
|
||
|
||
- 应用级路由文件 `app/<app>/route/route.php` **不会自动加载**
|
||
- 全局路由统一写在 `route/app.php`,并携带应用名前缀
|
||
|
||
```php
|
||
// route/app.php
|
||
Route::get('site/doc', 'site/doc/index');
|
||
```
|
||
|
||
插件路由则写在 `addon/<插件名>/route/app.php`,使用相对组名,由
|
||
`AppService::loadAddonRoutes()` 自动包裹 `Route::group('<插件名>')`。
|