thinkphp6多应用模式需手动拆分app目录为子系统独立目录(如admin、api),并同步配置app_multi和app_namespace,子应用路由须用route::import()显式加载,配置与中间件等不跨应用共享。

多应用模式开启后,app 目录结构必须手动拆分
ThinkPHP6 默认是单应用结构,启用多应用模式不是改个配置就完事——app 目录得从平铺变成按子系统分目录。否则路由找不到控制器,AppNotFoundException 会直接报给你看。
实操建议:
- 在
app下为每个子系统建独立目录,比如app/admin、app/api、app/portal - 每个子目录里必须包含
controller、route.php(可选)、config等基础结构,不能只放控制器 -
app/common是共享层,但注意:它不会自动加载到各子应用的命名空间下,要用use app\common\...显式引入 - 别把
app/index当“默认应用”留着不用——TP6 多应用下,没有隐式默认,所有请求必须命中某个子应用名,否则 404
app_multi 配置开关和 app_namespace 命名空间必须配对生效
只在 config/app.php 里把 app_multi 设为 true 不够,app_namespace 还得同步改成顶层命名空间(比如 app),否则控制器类自动加载会失败,报 Class not found。
常见错误现象:
- 访问
/admin/index/index报错Class 'app\admin\controller\Index' not found—— 很可能是app_namespace还是默认的app\controller - 子应用路由能跑通,但模型调用报错 —— 检查
app/admin/model下的类是否用了正确的命名空间,比如namespace app\admin\model;,而不是app\model - CLI 命令(如
php think make:controller admin/Test)默认仍生成到app/controller,需加--app=api参数指定目标应用
路由定义必须显式绑定子应用,不能依赖路径自动识别
TP6 多应用模式下,route/route.php 是全局路由入口,但子应用自己的路由要单独加载,靠 Route::import() 引入,不写这句,子应用的 route.php 就是死文件。
使用场景举例(在全局 route/route.php 中):
Route::import('admin', 'admin'); // 加载 app/admin/route.php
Route::import('api', 'api'); // 加载 app/api/route.php
关键点:
- 第一个参数是「路由分组标识」,会影响 URL 前缀(如
Route::group('admin', ...)会让路由带/admin前缀),但和子应用目录名无关 - 第二个参数才是子应用目录名,必须和
app下的实际目录一致,大小写敏感 - 子应用内的
route.php里不要再写Route::group('admin', ...),否则 URL 变成/admin/admin/xxx - 如果子应用要支持域名部署(如
admin.example.com),得在config/route.php里配domain规则,不能只靠路由分组
配置、中间件、事件监听器默认不跨应用共享
多应用不是“多个实例共用一套配置”,每个子应用启动时会独立加载自己的 config/ 和 middleware.php。这意味着你改了 app/config/app.php,对 app/admin 没影响。
容易踩的坑:
- 数据库配置写在
app/config/database.php,结果app/admin连不上库——因为它的配置实际读的是app/admin/config/database.php - 自定义中间件放在
app/middleware/,但在app/api/middleware.php里没注册,导致 API 请求不走该中间件 - 事件监听器在
app/event.php里注册,但只有app/index能触发;其他子应用要各自在app/{name}/event.php里重新注册 - 想复用配置?用
Config::load()手动合并,比如在app/admin/config/app.php开头加Config::load('../common/config/database.php', 'database');
子应用之间真正共享的,只有 public/ 静态资源和 runtime/ 缓存目录(除非你为每个子应用单独设了 runtime_path)。其他一切,都得按需复制或引用。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











