根本原因是改完composer.json后未执行composer dump-autoload,导致vendor/composer/autoload_psr4.php未更新;psr-4命名空间须双反斜杠结尾、路径须正斜杠结尾且为相对路径,配置必须在顶层autoload字段中。

composer.json改了autoload但类还是找不到
根本不是 Composer 没读你的配置,而是它压根没把新规则写进 vendor/composer/autoload_psr4.php——改完 composer.json 后不手动执行命令,文件永远是旧的。
-
autoload必须是顶层字段,不能嵌在require或scripts里;拼错成autoloader或带下划线也会被完全忽略 - PSR-4 命名空间必须以双反斜杠结尾:
"App\"✅,"App"❌,JSON 中只写一个反斜杠也 ❌ - 路径必须是相对路径、正斜杠结尾:
"src/"✅,"src"❌(拼接时会变成srcMyClass.php),"./src/"或"/src/"都不认 - 改完立刻跑
composer dump-autoload(简写composer du),别等install或update——它们只在composer.lock变更时才顺带触发 autoload 重生成
运行 dump-autoload -v 却没看到我的命名空间
说明配置没被识别,不是路径或大小写问题,而是更底层的解析失败。这时候别猜,让 Composer 自己报错。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先运行
composer validate,检查 JSON 格式:漏逗号、多逗号、中文引号、BOM 头都会导致autoload被跳过 - 用
composer dump-autoload -v看输出末尾:如果连Scanning packages都没出现,大概率是composer.json语法错误 - 如果输出里有扫描日志但没你的前缀(比如搜不到
App),再确认命名空间字符串是否被其他配置项意外截断——比如前面加了空格、tab,或后面多了不可见字符 - Linux/macOS 下用
cat -A composer.json | grep App查看是否有隐藏符号
本地能加载,上线就 Class not found
线上环境不会原谅开发时的松懈:大小写、权限、引入路径,三者错一个就全挂。
- 入口文件必须用
require __DIR__ . '/vendor/autoload.php';,不能用require 'vendor/autoload.php'——当前工作目录(getcwd())在 CLI 和 Web SAPI 下可能完全不同 - Linux 服务器严格区分大小写:类名
UserService对应的文件必须叫UserService.php,目录必须是src/Service/,不能是src/service/ - 检查
vendor/autoload.php文件权限:ls -l vendor/autoload.php应显示至少-rw-r--r--;Web 用户(如www-data)必须有读权限 - 上线不要复制
vendor/,而要在服务器上跑composer install --no-dev --optimize-autoloader,确保 autoload 映射与目标环境匹配
缓存清理要分层操作,不能只清一类
Composer 的自动加载缓存不止一个文件,且不同场景需不同清理策略。
- 修改 autoload 配置后,必须清掉
vendor/composer/autoload_*.php(尤其是autoload_psr4.php和autoload_classmap.php),最稳妥方式是composer dump-autoload重生成 - 若用了
--classmap-authoritative,删掉autoload_classmap.php后不重新生成会导致所有类都报错,因为此时 Composer 认定“不在 classmap 里的类就不存在” - PHP OPcache 可能缓存了旧的
autoload_real.php或autoload_static.php,需重启 PHP-FPM 或执行opcache_reset() - CI/CD 部署中,
post-install-cmd阶段无法保证autoload.php已就绪,应改用post-autoload-dump触发后续清理(如 Laravel 的config:clear)
vendor/autoload.php 的文件权限 + 入口文件中 require 的路径写法 + composer install 是否带 --no-dev**。这三个点任意一个出错,都会让整个 autoload 链路静默失效,且错误信息不指向真实原因。










