ThinkPHP5升级到6后需重装think-multi-app扩展、重建子应用目录、修正命名空间与路由导入逻辑,否则/admin访问会404或Class not found;必须按TP6规范操作,禁用TP5的app_multi_module配置。

ThinkPHP5升级到6后,原有多应用配置全部失效,必须按TP6规范重装扩展、重建目录、重写路由导入逻辑,否则访问/admin会直接404或报Class not found。
先确认TP6版本和扩展安装状态
在项目根目录执行php think version,输出中必须含think-multi-app字样且topthink/think版本显示为6.x;若无think-multi-app,运行composer require topthink/think-multi-app安装。
安装后检查config/app.php的'providers'数组末尾是否已自动加入\think\multi\AppServiceProvider::class;未自动注册则手动添加,否则多应用中间件不生效。
【切勿用TP5的app_multi_module配置方式】——TP6已废弃该配置项,改它完全无效。
重建子应用目录结构
删除TP5时代手建的app/admin等目录,全部用命令重建:
执行php think build admin生成标准admin应用骨架;再执行php think build api生成api应用。
验证app/admin/controller/Index.php中类声明是否为namespace app\admin\controller;;若含大写字母(如App\Admin)或短横线(如app\user-v2),框架将拒绝加载该应用。
检查app/admin/config/app.php是否存在,若缺失需手动创建并写入return ['app_namespace' => 'app\admin'];,否则控制器自动加载失败。
同步修改核心命名空间配置
打开项目根目录config/app.php,找到'app_namespace'项,将其值改为'app'(注意不是app\controller)。
同时确认'app_multi'设为true,此配置在TP6中替代了TP5的app_multi_module。
【app_namespace必须是顶层命名空间】——设成app\controller会导致所有子应用控制器类找不到。
显式导入子应用路由
打开config/route.php,确保顶部已引入Route门面:use think\facade\Route;。
在文件末尾添加:
Route::import('app/admin/route.php', 'admin');
Route::import('app/api/route.php', 'api');
第二个参数'admin'和'api'必须与app/下目录名完全一致(大小写敏感),漏掉或写错将导致路由静默失效。
别在app/admin/route.php里再套Route::group('admin', [...]),否则URL变成/admin/admin/index。
调整入口文件绑定逻辑
打开public/index.php,在require __DIR__ . '/../vendor/autoload.php';之后、App::run()之前插入绑定代码:
若按路径前缀识别(推荐):\think\App::bind('admin');
若按子域名识别(需Nginx/Apache配合):if ($_SERVER['HTTP_HOST'] === 'admin.localhost') { \think\App::bind('admin'); }
【绑定语句必须在App::run()之前执行】——放错位置会导致整个请求生命周期都使用默认index应用上下文。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











