必须在ThinkPHP6项目根目录(含composer.json、app/、public/等)执行composer require topthink/think-multi-app;装完需清空app/残留文件、设置config/app.php中'auto_multi_app' => true,并确保public为Web根目录。

composer require topthink/think-multi-app 必须在项目根目录执行
装不上、提示 Package not found 或 Could not find a matching version,八成是路径错了。TP6 的多应用扩展不是全局工具,它要写进你当前项目的 composer.json 并生成 autoload 映射。
常见错误现象:
- 在
D:\xampp\htdocs下直接运行composer require topthink/think-multi-app—— 这里没有composer.json,命令会失败或装到错误位置 - 在
vendor/topthink/thinkphp目录里执行 —— 这是框架源码目录,不是你的项目,装了也白装
正确做法:
- 先进入你的 TP6 项目根目录(即含
app/、config/、public/、composer.json的那层) - 确认
composer.json里"require"段已存在"topthink/framework": "^6.0" - 再执行
composer require topthink/think-multi-app
装完后,vendor/topthink/think-multi-app 目录必须真实存在,且 composer.json 的 autoload 里应新增 PSR-4 映射(Composer 会自动处理,无需手动改)。
装完不生效?检查入口文件和 app 目录结构
扩展装成功 ≠ 多应用模式就启用了。TP6 不靠“插件开关”,而是靠运行时识别目录结构 + 配置触发逻辑。
关键点:
-
public/index.php必须包含require __DIR__ . '/../vendor/autoload.php';—— 少这行,think-multi-app的类根本不会被加载 -
app/目录下不能留有单应用残留:比如app/index/controller/Index.php或app/common.php这类旧结构,必须清空 - 清空后
app/应该只剩空文件夹(如app/home/、app/admin/),否则 TP 启动时仍会尝试加载单应用逻辑,报错Class 'app\controller\Index' not found
验证方式:删掉 app/ 全部内容,然后运行 php think build admin,看是否生成 app/admin/controller/Index.php 和对应命名空间。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
config/app.php 的 auto_multi_app 配置不是可选项
'auto_multi_app' => true 这行必须显式写在 config/app.php 中,且不能放在注释里,也不能拼错键名(比如写成 auto_multi_app_ 或 multi_app)。
典型配置片段:
return [
// 开启多应用
'auto_multi_app' => true,
// 默认应用名(访问 / 时跳转的入口)
'default_app' => 'home',
// 可选:关闭应用快速访问(避免 /admin/controller/action 路由冲突)
'app_express' => false,
];
注意:
- 这个配置只在
config/app.php里有效,.env不识别AUTO_MULTI_APP这类变量 - 如果用的是 Swoole 或 RoadRunner 等常驻内存服务,改完配置后必须重启服务,否则缓存未刷新,新配置不生效
-
'default_app'值必须对应一个真实存在的应用目录名(如app/home/),否则访问根路径会报App not exists
为什么 php think build demo 后访问 404?
生成了目录,但 URL 打不开,大概率是路由或域名配置问题,不是扩展没装好。
排查顺序:
- 确认 Web 服务器 DocumentRoot 指向的是
public/目录,不是项目根目录 —— 否则index.php不会被当作入口,PATH_INFO 丢失 - 访问
http://localhost:8000/admin(假设建了 admin 应用),而不是http://localhost:8000/app/admin - Apache 用户需开启
mod_rewrite;Nginx 用户需在 server 块中添加 ThinkPHP 推荐的 location 规则,否则 PATH_INFO 解析失败,所有路由都 fallback 到首页或 404 - 如果用
php think run内置服务器,它默认支持 PATH_INFO,但 Windows 下某些 PHP 版本有 bug,建议加-S localhost:8000 public/router.php显式指定路由引导文件
最容易被忽略的一点:多应用模式下,每个应用的配置是隔离的,app/admin/config/route.php 里的规则只对 /admin/xxx 生效,别指望它影响 /home/xxx —— 这不是 bug,是设计前提。

















