class not found但文件存在,先查autoload_psr4.php中是否有对应命名空间;若无,则因composer.json中autoload配置位置错误、命名空间末尾缺双反斜杠、路径非相对项目根目录、被git忽略或大小写不匹配所致。

Class not found但文件存在,先看autoload_psr4.php里有没有你的命名空间
运行composer dump-autoload -v后,直接打开vendor/composer/autoload_psr4.php,用 Ctrl+F 搜索你的命名空间前缀(比如'App')。如果没出现,说明 PSR-4 映射根本没被加载——不是类写错了,是composer.json里那行配置压根没生效。
常见静默失败点:
-
"autoload"键写在了scripts或config下,Composer 直接忽略 - 命名空间末尾漏了反斜杠:
"App": "app/"❌ 应为"App\": "app/"✅(JSON 解析后"App"变成无尾缀字符串,PSR-4 匹配失败) - 路径用了
./app/或绝对路径,PSR-4 只接受项目根目录下的相对路径,且末尾必须带/ - 目录被
.gitignore忽略,dump-autoload默认跳过被忽略路径
Linux下文件路径、命名空间、类名三者大小写必须逐字节一致
Windows/macOS 默认不区分大小写,Linux 是严格区分的。你在 Windows 上把src/Utils/Helper.php写成src/utils/helper.php可能“跑得通”,一上 Linux 就崩:PHP 找不到UtilsHelper,因为真实路径是小写的utils。
验证方式很直接:
- 终端执行
ls -l src/Utils/Helper.php,确认真实路径拼写 - 打开文件,检查
namespace声明是否与目录结构完全对应(namespace AppHttpControllers;→ 路径必须是app/Http/Controllers/,不能是app/http/controllers/) - 类名必须和文件名完全一致:
class UserController→ 文件必须叫UserController.php,不是usercontroller.php或UserControllerController.php
Git默认忽略大小写变更,协作时极易丢文件
Git 在 Linux/macOS 下默认core.ignorecase = true,这意味着你把Helper.php重命名为helper.php,git status可能完全没反应——协作者git pull后,文件直接消失或加载失败。
立即检查并修复:
- 运行
git config core.ignorecase,若输出true,说明当前仓库已关闭大小写敏感 - 临时修复:
git config core.ignorecase false,然后git rm --cached Helper.php && git add helper.php - 团队长期方案:项目根目录加
.gitattributes,写入* text=auto eol=lf,并配合 pre-commit 脚本检查文件名是否符合 PascalCase
别信“本地能跑就没事”,用Linux容器验证才是真保障
某些包的composer.json中声明的 autoload 路径大小写不规范(比如写成"FooBar\": "src/foo/bar"),而其实际文件结构是src/Foo/Bar/。在 Windows/macOS 开发时可能“恰好能跑”,但部署到 Linux 就报Class not found。
实操建议:
- CI/CD 流水线必须用 Linux 环境跑
composer install和基础启动测试 - 本地开发可用
docker run --rm -v $(pwd):/app -w /app php:8.2-cli composer install快速验证 - IDE 重命名类时,务必同步改文件名;否则 Git 在 Linux 下可能根本不记录变更











