ThinkPHP 8 多应用架构搭建与落地要点
多应用模式适合把前台、后台和 API 放在同一个项目里,但彼此保留各自的控制器、视图和中间件。共享的部分则收拢到模型、服务和配置里。这样做的好处是结构清楚,代价是项目复杂度会比单应用高一点,所以它更适合中大型项目,或者那些天然就要分端管理的业务。
1. 多应用模式到底解决什么问题
多应用模式下,URL 通常会长成 http://domain.com/应用名/控制器/操作 这种样子。比如 /admin/user/index 指向后台用户列表,/api/user/login 对应接口登录。
这套结构比较适合下面几类场景:
- 前台、后台、API 分开维护
- 商城、论坛、博客这类子系统并存
- 不同业务模块需要独立部署或做权限隔离
如果项目只有一个页面系统,或者只是一个很轻的后台管理页,单应用往往更省心。多应用不是不能上,只是很多时候没必要把事情做复杂。
| 特性 | 单应用模式 | 多应用模式 |
|---|---|---|
| 目录结构 | app/controller/ | app/admin/controller/, app/api/controller/ |
| 路由 | /user/login | /admin/user/login, /api/user/login |
| 适用场景 | 小型项目 | 中大型项目 |
| 复杂度 | 简单 | 中等 |
| 维护性 | 一般 | 好 |
2. 安装与启用
ThinkPHP 8.0 默认是单应用模式,要用多应用得先装扩展。
# 创建项目
composer create-project topthink/think tp8_multi_app
# 进入目录
cd tp8_multi_app
# 安装多应用扩展
composer require topthink/think-multi-app
装完后会自动生成对应支持文件,通常不用再额外折腾配置就能启用。
3. 目录怎么拆更顺手
目录设计最好从一开始就定下来,不然后面补结构会很乱。比较稳妥的做法是把公共模块放进 app/common/,再把每个应用的业务逻辑拆到各自目录里。
project/
├── app/
│ ├── common/ # 公共模块(所有应用共享)
│ │ ├── model/ # 共享模型
│ │ ├── service/ # 共享服务
│ │ ├── library/ # 共享类库
│ │ └── validate/ # 共享验证器
│ ├── admin/ # 后台应用
│ │ ├── controller/
│ │ ├── service/
│ │ ├── middleware/
│ │ └── view/
│ ├── api/ # API 应用
│ │ ├── controller/
│ │ ├── middleware/
│ │ └── route/
│ └── index/
│ ├── controller/
│ └── view/
├── config/
├── /
└── runtime/

