ThinkPHP 6.0 多应用模式需四者严格对齐:扩展安装(composer require topthink/think-multi-app)、目录结构(删除app/controller、用php think app:create admin创建应用)、命名空间(如namespace appadmincontroller)、路由导入(Route::import('admin', 'admin')),缺一不可。
ThinkPHP 6.0 多应用模式不是改个配置就能跑通,它依赖扩展、目录结构、命名空间和路由加载四者严格对齐。漏掉任意一环,就会报 App not exists 或 Class not found。
TP6.0 默认不带多应用能力,topthink/think-multi-app 是硬性前置依赖。不装它,目录建得再标准也没用。
composer require topthink/think-multi-app
app/controller 目录(及其下所有文件)——只要这个目录存在,框架就强制降级为单应用模式,app_multi_module => true 也无效config/app.php 中是否已启用:'app_multi_module' => true;较新版本(6.0.2+)已废弃 auto_multi_app,不用管每个应用必须是 app/ 下的小写子目录,且命名空间必须与路径完全一致。大小写或符号错误会导致 404 或类加载失败。
php think app:create admin
app/admin/controller/Index.php、app/admin/route.php、app/admin/config.php
namespace appadmincontroller;,不能是 appAdmincontroller 或 appcontroller
view/admin/,比如 fetch('index') 实际读取的是 view/admin/index.html
route/route.php 是全局入口,但子应用的路由文件不会自动加载。不手动 import,app/admin/route.php 就是死文件。
立即学习“PHP免费学习笔记(深入)”;
route/route.php 中添加:Route::import('admin', 'admin');
'admin' 必须与 app/admin 目录名完全一致(大小写敏感)'admin' 是路由分组标识,会影响 URL 前缀,比如访问 /admin/dashboard
app/admin/route.php 内部应写 Route::get('dashboard', 'Index/dashboard'),避免和主路由冲突ThinkPHP 的配置合并机制是「应用级覆盖全局」,不是「开关式启用」。想让 admin 用独立数据库,关键不是打开某个 flag,而是把配置文件放对位置。
config/admin/ 目录下,例如 config/admin/database.php 会自动覆盖全局 database.php
runtime/admin/ 和 runtime/index/ 互不干扰config/app.php 中加:'default_app' => 'index'