ThinkPHP单应用与多应用目录区别在于app下是否含子目录及配套结构:单应用时app/controller等直接存放代码,无子目录;多应用需app/admin等子目录并配独立config/route等,TP6需扩展而TP8已弃用该模式。

ThinkPHP 单应用和多应用的目录区别,核心在于 app 目录下是否存在子应用目录,以及配套的入口、配置、路由等是否按模式对齐。不是只改一个配置就能切换,结构和逻辑必须一致。
单应用模式:app 下直接放类库
这是默认安装后的结构,所有业务代码集中在 app 根目录下:
- 控制器统一放在
app/controller/(如app/controller/Index.php) - 模型统一放在
app/model/,视图统一放在app/view/ -
app/下不能有admin/、api/这类子目录;一旦存在,框架可能误判为多应用 - 全局配置在
config/下,所有应用共用同一套数据库、缓存、路由等设置 - 只有一个入口文件
public/index.php,URL 如/index或/user/profile都由它统一处理
多应用模式:app 下按应用分目录隔离
每个应用拥有独立的运行环境,目录结构是物理隔离的基础:
- 必须在
app/下创建子目录,如app/admin/、app/api/、app/home/ - 每个子目录内需包含自己的
controller/、model/、view/、config/、route/等,例如:
app/admin/controller/Index.php(命名空间为app\admin\controller)
app/admin/config/database.php(可覆盖全局数据库配置) - TP6 需要安装扩展:
composer require topthink/think-multi-app;TP8 已移除该模式,不可用 - 通常需多个入口文件,如
public/admin.php内定义define('APP_NAME', 'admin'),并加载对应应用 - URL 路径第一段即应用名,如
/admin/index表示访问app/admin应用下的Index控制器
关键细节:结构不匹配会导致 404 或跳错
常见错误不是配置写错,而是目录和逻辑没对齐:
立即学习“PHP免费学习笔记(深入)”;
- 删了
app/admin/目录但还在入口里设APP_NAME='admin'→ 找不到应用 - 保留
app/admin/但关闭多应用(APP_MULTI_MODULE = false)→ 框架忽略子目录,控制器无法加载 - TP6 中
app/admin/route.php缺失 → 报错 “App not exists: admin”,哪怕控制器存在 - TP8 项目强行套用 TP6 多应用结构 → 扩展不兼容,出现
Class 'thinkApp' not found
TP8 的替代思路:不用多应用,改用模块+路由分组
官方已放弃多应用架构,推荐更轻量的组织方式:
- 仍用单应用结构:
app/admin/controller/、app/api/controller/是模块,不是独立应用 - 通过路由分组绑定前缀:
Route::group('admin', function () { ... })->middleware('auth'); - 共享同一套容器、配置和数据库连接,但权限、中间件、视图路径可差异化控制
- 无需额外扩展,不增加部署复杂度,更适合前后端分离或微服务化演进



















