ThinkPHP6项目必须严格遵循官方目录规范:根目录下固定含app、config、route、public、runtime五目录;app内按MVC分层且禁止平铺文件;配置统一放config目录,多应用时模块配置可放app/{module}/config/;路由须在route.php中return数组内定义。

要让ThinkPHP6项目结构清晰、便于团队协作和后期维护,必须严格遵循框架约定的目录组织方式,不能凭经验随意新建文件夹或调整层级。错误的结构会导致自动加载失败、路由无法匹配、模型调用报错等连锁问题。
核心目录结构必须按TP6官方规范创建
在项目根目录下,执行 php think build 命令会自动生成标准骨架,但新手常手动删改导致异常。正确做法是:先确认已通过Composer安装thinkphp/framework 6.x版本 → 运行php think build --config build.php(build.php需提前定义模块列表)→ 等待命令输出“Build Success”后再进入开发。
生成后的根目录下必须存在以下5个一级目录:app、config、route、public、runtime。其中app是业务代码主战场,public是唯一Web服务器可访问入口,runtime必须设为可写,否则日志和缓存全部失效。
app目录下的MVC三层划分规则
app目录内不允许平铺控制器或模型文件,所有业务类必须归属明确模块。默认单应用模式下,app目录结构应为:
立即学习“PHP免费学习笔记(深入)”;
app/
├── controller/
├── model/
├── view/
└── common.php
controller目录下每个PHP文件对应一个控制器类,文件名与类名必须完全一致(如Index.php → class Index),且必须继承think\Controller或自定义基类;model目录下同理,User.php → class User extends think\Model;view目录存放HTML模板,默认后缀为.html,路径需与控制器方法名映射(如index/index → app/view/index/index.html)。
注意:若启用多应用模式,app目录下会出现多个子目录(如admin/、api/),此时每个子目录内部必须完整包含controller、model、view三层,且各自独立配置路由和中间件。
配置文件与路由文件的放置位置
方法一:全局配置统一放config目录
所有基础配置(database.php、app.php、cache.php等)必须放在config目录下,不能散落在app或其它位置。数据库配置中'hostname' => '127.0.0.1'这类值建议用环境变量替代,避免提交到Git时泄露测试库密码。
方法二:模块级配置可嵌套在app/{module}/config/下
仅当使用多应用且某模块需差异化配置时才启用此方式,例如app/admin/config/database.php会覆盖全局config/database.php中同名键值。但【该机制不适用于单应用模式】,强行添加将被框架忽略。
route目录下必须有route.php主文件,它由框架自动加载。RESTful路由建议单独建route/api.php并通过include引入,避免主文件臃肿。所有Route::get()定义必须写在return数组内,漏掉return会导致整个路由表为空。



















