tp6 中 application 目录被移除,核心代码改放小写的 app/ 目录;框架代码移至 vendor/topthink/thinkphp/;配置拆分为 config/ 下多个文件,.env 仅作环境变量覆盖;类加载严格遵循 psr-4,需执行 composer dump-autoload。

tp5 的 application 目录在 tp6 里去哪了? ThinkPHP6 默认不再生成 application 目录,整个项目从「单应用结构」起步,核心应用代码直接放在 app/ 下——注意是小写的 app,不是 tp5 那个大写的 Application。这个目录里默认包含 controller、model、middleware 等子目录,命名空间也按 PSR-4 对齐路径:appcontrollerIndex 对应 app/controller/Index.php。 - tp5 的
Application 是多应用起点,目录名首字母大写、自带模块划分(如 index、admin) - tp6 的
app/ 是单应用默认根,若需多应用,必须手动安装扩展:composer require topthink/think-multi-app - tp5 中
thinkphp/ 框架代码在项目根下;tp6 中框架已完全移至 vendor/topthink/thinkphp/,和业务代码彻底分离
.env 文件能替代所有配置吗? 不能,但它是 tp6 配置体系的“入口开关”。tp6 把原先 tp5 的 config.php 拆成多个文件(app.php、database.php、route.php 等),统一放在 config/ 目录下;而 .env 是一个纯文本环境变量文件,只负责覆盖其中部分字段(比如 DB_HOST、APP_DEBUG)。 -
.env 必须叫这个名字,不能加后缀、不能分环境(如 .env.production 不生效) - 它只影响被
Env::get() 显式读取的配置项,不会自动映射到所有 config 文件 - 常见错误:改了
.env 但数据库连不上 → 检查 config/database.php 是否用了 env('DB_HOST'),而不是硬编码 - 开发时建议把
.env 加入 .gitignore,避免密码泄露
类自动加载为什么总报 class not found? tp6 彻底放弃 tp5 的混合加载机制(自定义 + Composer),只依赖 Composer 的 PSR-4 自动加载规则。这意味着: - 所有类必须严格遵循命名空间与物理路径一致,比如
appserviceUserService 必须位于 app/service/UserService.php - tp5 允许控制器方法用下划线命名(
user_list),tp6 要求小驼峰(userList),否则路由匹配失败且不报错,只返回 404 - 新增类后必须执行
composer dump-autoload(开发中可加 -o 参数优化性能) - tp5 的
extend/ 目录在 tp6 中已被废弃,第三方类库应统一走 vendor/ 或通过 Composer 加载
tp6 的 public/ 和入口文件有什么变化? tp6 的 public/ 仍是 Web 可访问根目录,但入口文件 index.php 更轻量:它只做两件事——引入 vendor/autoload.php 和启动 thinkApp。tp5 的入口还承担了常量定义、路径设置等职责。
Application 是多应用起点,目录名首字母大写、自带模块划分(如 index、admin)app/ 是单应用默认根,若需多应用,必须手动安装扩展:composer require topthink/think-multi-app thinkphp/ 框架代码在项目根下;tp6 中框架已完全移至 vendor/topthink/thinkphp/,和业务代码彻底分离.env 文件能替代所有配置吗? 不能,但它是 tp6 配置体系的“入口开关”。tp6 把原先 tp5 的 config.php 拆成多个文件(app.php、database.php、route.php 等),统一放在 config/ 目录下;而 .env 是一个纯文本环境变量文件,只负责覆盖其中部分字段(比如 DB_HOST、APP_DEBUG)。 -
.env必须叫这个名字,不能加后缀、不能分环境(如.env.production不生效) - 它只影响被
Env::get()显式读取的配置项,不会自动映射到所有 config 文件 - 常见错误:改了
.env但数据库连不上 → 检查config/database.php是否用了env('DB_HOST'),而不是硬编码 - 开发时建议把
.env加入.gitignore,避免密码泄露
类自动加载为什么总报 class not found? tp6 彻底放弃 tp5 的混合加载机制(自定义 + Composer),只依赖 Composer 的 PSR-4 自动加载规则。这意味着: - 所有类必须严格遵循命名空间与物理路径一致,比如
appserviceUserService 必须位于 app/service/UserService.php - tp5 允许控制器方法用下划线命名(
user_list),tp6 要求小驼峰(userList),否则路由匹配失败且不报错,只返回 404 - 新增类后必须执行
composer dump-autoload(开发中可加 -o 参数优化性能) - tp5 的
extend/ 目录在 tp6 中已被废弃,第三方类库应统一走 vendor/ 或通过 Composer 加载
tp6 的 public/ 和入口文件有什么变化? tp6 的 public/ 仍是 Web 可访问根目录,但入口文件 index.php 更轻量:它只做两件事——引入 vendor/autoload.php 和启动 thinkApp。tp5 的入口还承担了常量定义、路径设置等职责。
appserviceUserService 必须位于 app/service/UserService.php user_list),tp6 要求小驼峰(userList),否则路由匹配失败且不报错,只返回 404composer dump-autoload(开发中可加 -o 参数优化性能)extend/ 目录在 tp6 中已被废弃,第三方类库应统一走 vendor/ 或通过 Composer 加载public/ 和入口文件有什么变化? tp6 的 public/ 仍是 Web 可访问根目录,但入口文件 index.php 更轻量:它只做两件事——引入 vendor/autoload.php 和启动 thinkApp。tp5 的入口还承担了常量定义、路径设置等职责。 tp6 的目录结构不是“换了个名字”,而是把配置、加载、运行时三者之间的耦合切开了。最容易出问题的地方,往往不是你写了什么,而是你忘了删掉 tp5 时代留下的习惯:比如还在 application/ 下建模块、还在 config.php 里写全局配置、或者以为 .env 能自动切换整套环境配置。