ThinkPHP 6.1.5 目录结构彻底重构,需将 Application/→app/、模块目录小写化、配置扁平化至config/、入口改用public/index.php标准引导,并严格适配PSR-4命名空间与自动加载。

从 ThinkPHP 3.2.4 升级到 6.1.5,目录结构不是“微调”,而是彻底重构。TP6 引入了标准化的 PSR-4 自动加载、应用分层明确、入口收敛等设计原则,原有 TP3.2 的目录习惯(如 Application 大写、模块嵌套深、配置分散)必须按 TP6 规范重映射,否则类找不到、路由不生效、配置不加载是必然结果。
核心目录映射关系
这是迁移中最不可跳过的一步,必须逐项对照调整:
-
原
Application/→ 新app/:首字母小写,路径全改;所有控制器、模型、中间件等均移入此目录 -
原
Application/Home/Controller/→ 新app/home/controller/:模块名转小写,命名空间同步改为apphomecontroller -
原
Application/Common/Model/→ 新app/common/model/:注意命名空间为appcommonmodel,且模型类需继承hinkModel(非 TP3 的Model) -
原
Conf/和Application/Common/Conf/→ 全部合并进config/:TP6 不支持子目录嵌套配置,所有.php配置文件(如database.php、app.php)必须扁平放在config/下 -
原
Public/→ 新public/:入口文件index.php必须放在此目录,且内容替换为 TP6 标准引导代码:(new hinkApp())->run()->send();
命名空间与自动加载适配
TP3.2 默认无命名空间或用简单前缀,TP6 严格依赖 PSR-4。不改命名空间,use 语句会失效,控制器无法实例化:
- 控制器类开头加
namespace apphomecontroller;,并确保文件路径与命名空间完全一致 - 模型类命名空间统一为
appcommonmodel或按模块划分(如appusermodel),类名与文件名保持驼峰一致(User.php→class User extends hinkModel) - 检查
composer.json中"autoload": {"psr-4": {"app\": "app/"}}是否存在,缺失则执行composer dump-autoload -o - 删除所有
Vendor/下手动引入的require或import(),全部交由 Composer 自动加载
配置与入口文件重写
TP6 不再读取 Conf/ 或全局常量配置,一切以 config/ 目录和 public/index.php 为准:
立即学习“PHP免费学习笔记(深入)”;
-
public/index.php必须使用 TP6 官方标准引导,不能复用 TP3 的入口逻辑 -
config/app.php中设置'app_namespace' => 'app',明确应用根命名空间 - 数据库配置从
Conf/database.php拆出,单独存为config/database.php,格式按 TP6 文档要求(含default连接键、dsn或字段拆分) - 自定义配置(如
api.php)放入config/后,需在代码中显式加载:hinkConfig::load('api', 'api');,否则config('api.key')返回 null
静态资源与模板路径调整
TP3.2 的 Public/ 下混放 JS/CSS/模板,TP6 要求分离清晰,模板默认不再放 Public:
- 前端资源(JS/CSS/IMG)仍放
public/,如public/static/js/main.js - 模板文件移至
resources/views/(非Application/Home/View/),并在config/view.php中配置'view_path' => __DIR__ . '/../resources/views/' - 模板中引用静态资源需用
{:url('/static/js/main.js')}或{:asset('js/main.js')}(需开启 asset 支持) - 若沿用原有
Home/View/结构,可修改config/view.php的view_suffix和view_depr,但不推荐,违背 TP6 分层规范



















