# 目录结构 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//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('<插件名>')`。