thinkphp 6.x 多应用需三步:删 app/controller 等单应用目录、装 think-multi-app 扩展并注册、用 php think build 创建子应用;还需在入口文件定义 app_multi_module=true、路由显式导入、清缓存。

ThinkPHP 6.x 默认不启用多应用模式,哪怕你把 app/auto_multi_app 设为 true,只要 app/controller 目录存在,框架就认定是单应用——它压根不会走多应用初始化流程。想让项目支持多个子系统(比如 admin、api、portal),必须手动拆结构、装扩展、清缓存,三者缺一不可。
删掉 app/controller 等单应用残留目录
TP6 的判断逻辑非常直接:is_dir('app/controller') 返回 true → 强制单应用模式。哪怕你已配置 auto_multi_app => true,也无效。
- 必须删除
app/controller、app/model、app/middleware、app/view这些平铺在app/下的目录 - 保留
app/common.php、app/middleware.php等全局文件(它们仍生效) - 删完后清空运行时缓存:
php think clear:route和php think clear:config
装 think-multi-app 扩展并确认注册
TP6 的多应用能力不是内置功能,而是由独立扩展包 topthink/think-multi-app 提供。只改配置或手建目录,命令都执行不了。
- 在项目根目录执行:
composer require topthink/think-multi-app - 检查
config/app.php中的providers数组,确保包含:\think\multi\AppServiceProvider::class;若没有,手动加进去 - 运行
php think version,输出中应出现think-multi-app字样,否则扩展未加载成功 - 注意:这个扩展不兼容 ThinkPHP 8(即新版
think-swoole生态),确认版本用composer show topthink/think
用 php think build 创建应用目录,别手建
每个子应用(如 admin)必须由命令生成,否则命名空间、自动加载路径、路由识别全错。手建 app/admin 目录 + 复制控制器类,大概率触发 Class not found。
- 执行:
php think build admin(TP6.0.x)或php think app:create admin(TP6.1+) - 验证生成结果:
app/admin/controller/Index.php存在,且类定义为namespace app\admin\controller; - 新增应用后,立刻检查
config/app.php中的app_namespace是否为'app'(不是app\controller或其他) - 应用名只能是小写字母 + 下划线,
app/user-v2或app/Admin都会导致路由解析失败
路由必须显式导入,不能靠目录自动加载
TP6 不会因为 app/admin/route/app.php 存在就自动加载它。没显式导入,访问 /admin/xxx 会报 App not exists: admin。
- 在全局路由入口
config/route.php中添加:Route::import('admin', 'admin');—— 第二个参数必须和app/下目录名完全一致(大小写敏感) -
app/admin/route/app.php必须存在,且首行是:use think\facade\Route; - 不要在
app/admin/route/app.php里再套一层Route::group('admin', [...]),否则 URL 变成/admin/admin/xxx - 调试时可在
app/admin/route/app.php首行加exit('loaded');,访问/admin/看是否触发,快速验证是否加载成功
最容易被忽略的是入口文件那行 define('APP_MULTI_MODULE', true) —— 它才是最终开关,config/app.php 里的 auto_multi_app 在 TP6.0.2+ 已基本失效。切换单/多应用时,必须同步改入口文件、删/建目录、清缓存,三步一个都不能少。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











