thinkphp 6 部署后报 class not found,先抄下完整类名,再按 composer.json 里的 psr-4 映射找到实际文件,核对命名空间、类名和路径大小写。文件存在仍报错时,用 class_exists() 检查当前部署目录的自动加载,再对照 web 进程加载的版本。
从报错中找到要加载的完整类名
从报错里提取 appcontrollerUser 这样的完整类名。最后一段 User 是类名,前面的 appcontroller 是命名空间。如果报错里尝试加载的类名就不对,先检查调用处的 use 声明和拼写。

按 composer.json 把类名换算成文件路径
在项目根目录打开 composer.json,检查 autoload.psr-4 是否包含报错类所在的命名空间前缀。下面只是映射示例。若实际项目的配置不同,按实际映射找到起始目录。
{
"autoload": {
"psr-4": {
"app\": "app/",
"src\": "src/"
}
}
}
本地能跑、Linux 报错时检查大小写
按示例映射,appcontrollerUser 对应 app/controller/User.php,文件里应声明 namespace appcontroller; 以及 class User。逐段检查目录、文件名和类名的大小写,确认改动已经提交并同步到部署机器。
立即学习“PHP免费学习笔记(深入)”;
User.php 应该如何声明命名空间
仅在项目实际配置包含 app 命名空间到 app/ 目录的 PSR-4 映射时,可用下列最小类做对照。文件路径是 app/controller/User.php。生产项目已有同名类时,直接核对原文件。
<?php
declare(strict_types=1);
namespace appcontroller;
final class User
{
public function index(): string
{
return 'User controller OK';
}
}将全限定类名 appcontrollerUser 拆开后,命名空间为 appcontroller,类名为 User。目录 controller 和文件名 User.php 都应按实际映射核对。
Git 没识别文件名大小写改动怎么办
在开发仓库遇到 user.php 改为 User.php 但 Git 没识别时,用临时文件名过渡。先确认这两个目标文件名都未被其他文件占用。
git mv app/controller/user.php app/controller/UserCaseFix.php git mv app/controller/UserCaseFix.php app/controller/User.php git status --short
提交后,在部署环境重新核对文件名。若改了自动加载映射,部署时同步更新生成的 Composer 自动加载文件。
什么情况下要重新生成 Composer 自动加载文件
如果改过 autoload 配置,在部署项目根目录执行 composer dump-autoload;若 vendor 缺失,应按项目锁文件恢复依赖。随后重试触发错误的请求。如果仍然失败,核对 Web 进程加载的发布目录和对应 vendor/autoload.php。
用 class_exists() 区分自动加载和 Web 部署问题
进入部署版本的项目根目录,先核对 Composer 配置和目标文件,再用 class_exists 测自动加载。下列命令以 Linux 终端为例。
pwd
ls -l app/controller/User.php vendor/autoload.php
composer validate
php -r 'require "vendor/autoload.php"; var_export(class_exists("app\controller\User")); echo PHP_EOL;'输出 true 表示这个 CLI 进程能自动加载该类。若网页仍报错,继续核对 Web 进程使用的发布目录及框架引导。类只由框架启动过程注册时,单独使用 Composer 探针得到 false 还需要结合实际加载机制判断。



















