TP6已移除Loader机制,完全依赖Composer PSR-4加载;必须删除所有Loader::addNamespace调用,并通过composer.json配置psr-4映射+执行composer dump-autoload -o生效。

ThinkPHP 5 升级到 6 后,原来在 thinkphp/Conf/convention.php 中配置的 AUTOLOAD_NAMESPACE 自定义类加载规则全部失效,类文件真实存在却报 Class not found,是因为 TP6 彻底移除了旧版 Loader 机制,完全交由 Composer PSR-4 驱动。
确认是否还在用 TP5 的 autoload 配置
打开项目中任意控制器或中间件,搜索 AUTOLOAD_NAMESPACE 或 Loader::addNamespace。如果存在,立即删除——TP6 已移除 Loader 类,调用会直接报 Fatal error。
检查 app/common.php、thinkphp/base.php 或自定义初始化文件,删掉所有 Loader::addNamespace('xxx', 'xxx') 调用。这一步不做,后续任何修复都无效。
把自定义类迁入标准 PSR-4 结构
方法一:按 TP6 默认规范重放路径(推荐)
立即学习“PHP免费学习笔记(深入)”;
- 将原
./Test/lewan.php类移动到app/test/Lewan.php(注意首字母大写、.php 后缀、小写目录名) - 修改类文件顶部命名空间为
namespace app est;(反斜杠,全小写,无空格) - 确保类名为
class Lewan,与文件名Lewan.php完全一致
方法二:保留原路径但声明 PSR-4 映射
编辑项目根目录下的 composer.json,在 "autoload": {"psr-4": {}} 中添加:
"app\test\": "app/test/"(注意双反斜杠转义,路径末尾必须带斜杠)
【关键】Windows 下写成单斜杠 / 也能生效,但 Linux 服务器上漏掉末尾斜杠会导致映射失败
强制重建自动加载映射
在项目根目录终端执行:composer dump-autoload -o
这一步不可跳过,也不可用 composer install 或 composer update 替代——它们不会刷新 autoload_psr4.php 文件。
执行后检查 vendor/composer/autoload_psr4.php,确认新映射已写入数组,例如:'app\test\' => array($baseDir . '/app/test')。



















