chore: 重写初始提交(清空历史,整理后全量提交)
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
# 目录结构
|
||||
|
||||
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('<插件名>')`。
|
||||
Reference in New Issue
Block a user