ThinkPHP 6 多应用模式需安装 think-multi-app 扩展、用 php think build 创建子应用、同步配置 app_namespace 和 app_multi、显式导入子应用路由并指定应用名,否则将出现类找不到或应用未找到错误。

ThinkPHP 6 开启多应用模式不是改个配置就能跑通的事——app_multi 或 auto_multi_app 设为 true 只是第一步,目录结构、命名空间、路由加载、CLI 命令目标这四块不配齐,90% 的人会卡在 Class not found 或 AppNotFoundException。
必须安装 think-multi-app 扩展
TP6 核心包默认不带多应用能力,composer require topthink/think-multi-app 是硬性前提。没装这个,php think build admin 会报错 Command "build" is not defined;app/ 下建了 admin/ 目录也白搭,框架压根不识别。
- 扩展安装后会自动注册多应用中间件,无需手动添加
- 确认是否装成功:运行
composer show topthink/think-multi-app,有输出即有效 - 别用
think-swoole或 TP8 生态替代——它们已移除多应用支持,composer show topthink/think必须显示 6.x 版本
php think build 创建子应用目录,别手建
手动在 app/ 下新建 admin/ 文件夹,再复制 controller、route.php 等,极易漏掉命名空间声明或目录权限问题。官方推荐用命令生成:
-
php think build admin—— 自动生成app/admin/controller、app/admin/route.php、app/admin/config/等完整骨架 - 每个子应用名必须小写、无短横线(
admin✅,admin-v2❌) -
build命令不会覆盖已有文件,但也不会补全缺失的config/app.php,需检查子应用内是否含该文件
app_namespace 和 app_multi 必须同步改
只改 config/app.php 里的 'app_multi' => true 不够。控制器类自动加载失败(比如访问 /admin/index/index 报 Class 'app\admin\controller\Index' not found),大概率是 app_namespace 还卡在默认的 app\controller。
立即学习“PHP免费学习笔记(深入)”;
- 把
'app_namespace' => 'app'(不是app\controller) -
'default_app' => 'index'可设可不设,但没设时 URL 必须带应用名前缀,否则直接 404 -
'domain_bind'要配合 Web 服务器生效:Apache 需配.htaccess,Nginx 需在 server 块里加server_name admin.localhost
子应用路由必须显式 Route::import()
route/route.php 是全局入口,但子应用自己的 app/admin/route.php 不会自动加载。不写 Route::import(),那个文件就是死的,控制器再全也没用。
- 在
route/route.php末尾加:Route::import('app/admin/route.php', 'admin'); - 第二个参数
'admin'是关键,它把路由规则绑定到admin应用命名空间下 - 多个子应用就写多行,顺序无关,但路径字符串必须准确(注意斜杠方向和大小写)
最容易被忽略的是:子应用的 config/database.php 里数据库配置不会继承全局 config,得单独写;而 CLI 命令如 php think make:controller 默认仍往 app/controller 写,必须加 --app=admin 参数指定目标。这些点不处理,开发一半才发现模型调不通、命令生成错目录,返工成本远高于初始化时多敲几行。



















