composer dump-autoload -v未显示命名空间说明autoload配置未被解析,主因是composer.json中autoload字段不在顶层、PSR-4前缀末尾缺反斜杠(如"App"应为"App\")、路径非规范相对路径(如必须"src/"而非"./src/"或"src")、JSON格式错误(多逗号、中文标点、BOM头等)。

composer dump-autoload -v 输出里没出现你的命名空间
这说明 autoload 配置压根没被 Composer 解析,不是类写错了,是配置失效了。常见原因有:
- composer.json 里
autoload字段不在顶层,比如被错塞进require或scripts里 -
"App"写成"App\"才对,少一个反斜杠,PSR-4 前缀就匹配不上 - 路径用了
"./src/"或"src"—— 必须是"src/"(末尾带正斜杠,且不能带点) - JSON 格式错误:多逗号、中文引号、BOM 头、注释——
composer dump-autoload -v第一行就会报解析失败
vendor/composer/autoload_psr4.php 里有前缀但路径不对
打开这个文件,搜你的命名空间(如 "App\"),看它映射到的路径是不是你预期的绝对路径。容易忽略的点:
- 配置了
"App\": "app/",但类App\Http\Controllers\HomeController实际在app/MyApp/Http/Controllers/HomeController.php—— PSR-4 会截掉App\后拼Http/Controllers/HomeController.php,结果去找app/Http/Controllers/HomeController.php,自然失败 - Linux 下大小写敏感:
src/配置了,但目录名是Src/或文件名是homecontroller.php,路径拼出来就不存在 - PHP 文件里声明的是
namespace App\Http\Controllers;,但文件实际放在src/Controllers/,中间缺了Http/这一层
类名出现在 autoload_classmap.php 里,但运行时还是 Class not found
说明 classmap 扫到了,但加载器根本没走 classmap 分支。典型原因是 PSR-4 规则覆盖了它:
- 同时配了 PSR-4 和 classmap,而目标类既符合 PSR-4 路径推导,又在 classmap 列表中 → Composer 优先走 PSR-4,而 PSR-4 推导出的路径是错的
- 改了类文件位置,但没重新跑
composer dump-autoload -o,classmap 还指着旧路径 - 开发时用了
-o,结果“看起来能跑”,其实是 classmap 碰巧扫到了旧文件;删掉vendor/composer/autoload_classmap.php,再跑不带-o的dump-autoload,才能暴露真实路径问题
require 'vendor/autoload.php' 路径写错或执行顺序不对
这不是 Composer 配置问题,是你代码里引入自动加载器的方式错了:
- 入口脚本在
public/index.php,却写了require '../vendor/autoload.php'—— 正确必须是require __DIR__ . '/vendor/autoload.php'; - 路径用了
./vendor/autoload.php或../vendor/autoload.php,一旦工作目录变了,require就失效 -
vendor/autoload.php没被 require,或者被 require 在了其他逻辑之后(比如条件判断里漏了),那整个自动加载链就断了
autoload_psr4.php 里路径是对的,但文件权限是 000;或者 composer.json 语法合法,但 IDE 自动加了 BOM;又或者你在 Docker 里挂载了 vendor,却忘了透传符号链接权限。这些细节不报错,但会让自动加载静默失败。


















