ThinkPHP多应用模式需四步同步完成:安装think-multi-app扩展、入口文件定义APP_MULTI_MODULE常量、删除app/controller目录、创建规范子应用目录结构;缺一即导致404或路由错乱。

ThinkPHP多应用模式不是改一个配置就能跑起来的,必须四步同时到位:装扩展、定义常量、清理目录、建应用子目录。漏掉任何一项,都会出现 404、路由进错应用、App::getModule() 返回空等典型问题。
必须安装 think-multi-app 扩展
ThinkPHP 8.0 核心不内置多应用逻辑,topthink/think-multi-app 是唯一被官方认可的支撑扩展。没装它,框架压根不会识别 app/admin 这类子目录。
- 在项目根目录执行:
composer require topthink/think-multi-app - 安装后检查
config/app.php的providers数组,确认已自动加入\think\multi\AppServiceProvider::class;若没有,需手动添加 - 运行
php think app:create admin测试能否成功生成app/admin目录结构(含controller/、config/、middleware.php等)
必须在入口文件定义 APP_MULTI_MODULE 常量
这个常量只在 public/index.php(或其他入口)中引入框架前定义才生效。在 config/app.php 里写 'app_multi_module' => true 完全无效——这是最常踩的坑。
- 打开
public/index.php,在require __DIR__ . '/../vendor/autoload.php';这一行之前插入:define('APP_MULTI_MODULE', true); - 确保没有其他地方(比如中间件或命令行脚本)重复定义该常量
- 后续要切回单应用模式,删掉这行即可;设为
false也行,但不能靠 config 文件控制
必须删除 app/controller 目录
这是单应用残留结构。只要它还存在,框架在多应用模式下仍会尝试加载其中的控制器,导致路由冲突或误匹配(例如访问 /admin/index 却跑进 app/controller/Index.php)。
- 执行命令删除:
rm -rf app/controller(Linux/macOS),或手动彻底清空该文件夹 - 确认
app/下只剩子应用目录,如app/index/、app/admin/ - 每个子应用的控制器必须放在对应路径下,例如
admin应用的控制器是app/admin/controller/Index.php,命名空间为app\admin\controller
必须创建规范的应用子目录结构
框架不会自动创建应用目录,你得手动建好或用命令生成,且命名必须合规。
- 应用名只能是小写字母和下划线,
app/Admin、app/admin-v2都会失败 - 推荐用命令快速生成:
php think app:create admin(TP8)或php think build admin(TP6) - 每个子应用目录内至少要有
controller/和config/app.php;config/app.php中需明确设置:'app_namespace' => 'app\admin'、'default_controller' => 'Index' - 若要支持前台、后台、API 三端,可依次创建
app/web、app/admin、app/api
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











