ThinkPHP 的 app 目录是严格按命名空间和自动加载规则组织的业务代码核心区,包含 controller/、model/、view/(可选)、config/(多应用必需)、route/(多应用必需)等标准子目录,以及 service/、validate/、middleware/、event/ 等推荐业务层目录;多应用时需建小写子目录如 app/admin/,静态资源、入口文件、配置文件及框架核心类严禁放入 app 目录。

ThinkPHP 的 app 目录是整个应用的业务代码核心区,不是随便放文件的地方,而是严格按命名空间和自动加载规则组织的。它不只存控制器,而是分层承载 MVC 及更多职责,结构清晰、边界明确。
必须存在的标准子目录(小写命名)
这些目录名是框架约定的,大小写错误或改名会导致类无法自动加载:
-
controller/:放控制器类,如
UserController.php,类名必须驼峰大写,命名空间为App\Controller;负责接收请求、参数校验、调用服务、返回响应 -
model/:放模型类,如
UserModel.php,继承think\Model;专注数据库映射、ORM 操作、访问器/修改器 -
view/(可选但常见):放模板文件(.html 或 .php),路径需与控制器方法对应,如
index/index.html -
config/(多应用时必需):每个子应用可放自己的配置文件,如
database.php,覆盖全局配置 -
route/(多应用时必需):每个子应用独立的路由定义文件
route.php,缺了会报 “App not exists”
推荐补充的业务层目录(TP6/8 倡导)
这些不是框架强制,但能显著提升可维护性与测试性:
-
service/:放核心业务逻辑类,如
UserService.php;处理事务、跨模型协作、第三方调用;通过容器注入到 controller,实现“薄控制器” -
validate/:放验证器类,如
UserValidate.php;继承think\Validate;统一管理数据规则,避免在 controller 里写重复 check -
middleware/:放中间件类,如
AuthMiddleware.php;实现鉴权、日志、跨域等横切关注点
- event/:放事件监听器,配合事件系统解耦业务流程,比如用户注册后触发发邮件、写日志等动作
模块与多应用下的结构变化
开启多应用(如 admin、api、mobile)后,app 下不再是平铺文件,而是:
- 真实创建子目录:
app/admin/、app/api/,名称只能是小写字母+下划线 - 每个子目录内再建
controller/、model/、route.php等,命名空间自动变为app\admin\Controller - 不能只靠配置
app_multi = true,目录不存在,框架根本找不到应用
绝对不能放的东西
以下内容放错位置会直接导致报错或安全隐患:
- 静态资源(CSS/JS/图片)——必须进
public/,放 app 下浏览器无法访问 - 入口文件(index.php)——只在
public/下存在,app 内放一个会引发路由混乱 - 配置文件(.env、config/*.php)——应放在项目根或
config/目录,不在 app 内 - 框架核心类或扩展——属于
thinkphp/或extend/,不是 app 的职责
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











