psr-4不生效主因是composer.json中autoload配置错误或未执行composer dump-autoload;autoload必须为顶层键、命名空间需双反斜杠结尾、路径须相对且大小写精确、文件名与类名严格对应。

PSR-4 不生效,基本就是 composer.json 里那行配置写错了,或者改完没跑 composer dump-autoload——它不会自己更新,也不会报错告诉你哪错了。
composer.json 的 autoload 必须是顶层键
Composer 只认和 name、require 并列的一级 autoload 字段。它完全忽略嵌套在 require、scripts 或拼错名(比如 autoloader)里的配置。
-
"autoload"键名必须原样拼写,不能带连字符或下划线 - 整个
autoload块不能缩进到其他字段内部,必须顶格写在 JSON 根层级 - 常见错误:把
psr-4配置写在require-dev下面,结果毫无作用
命名空间前缀必须以双反斜杠结尾
JSON 中写成 "App": "src/" 才对;"App": "src/"(缺反斜杠)或 "App": "src/"(转义错误)都会让 Composer 跳过这条规则,且不提示。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- PHP 解析后实际存储的是
"App"(一个反斜杠),所以 JSON 里得写两个 - 匹配是严格前缀 + 字面量反斜杠:类
AppHttpControllersUserController只能被"App\": "src/"匹配,"App\Http\": "src/Http/"是另一条独立规则 - 空字符串
""或纯数字前缀(如"123\": "lib/")会被 Composer 7+ 拒绝
路径值必须是相对路径且大小写敏感
路径写成 "src/" ✅,"src" ❌(易导致拼出 srcMyClass.php),"/src/" ❌(绝对路径不支持),"../lib/" ❌(不允许上层跳转)。
- 路径必须真实存在,且大小写完全一致:Linux/macOS 下
src/Http/Controllers/和src/http/controllers/是两个不同目录 - 类
AppHttpControllersUserController对应文件必须是src/Http/Controllers/UserController.php,不能是usercontroller.php或Controller.php -
namespace声明行不能有前导空格或 tab:namespace AppHttpControllers;✅,namespace AppHttpControllers;❌
改完必须手动运行 composer dump-autoload
vendor/autoload.php 只是注册加载器,真正起作用的是 vendor/composer/autoload_psr4.php——这个文件不会自动更新,必须靠命令重写。
- 开发阶段用
composer dump-autoload -v(加-v参数),能暴露路径不存在、命名空间格式错误等具体问题 - 加
-o(optimize)会生成 classmap,跳过运行时路径检查,反而掩盖 PSR-4 配置错误 -
composer install不会触发 dump,除非vendor/为空或composer.lock里 autoload 哈希已过期 - CI/CD 部署时建议用
composer dump-autoload --no-dev,避免autoload-dev里的测试类混入生产环境
最常被忽略的一点:Composer 不扫描文件,只做字符串替换。差一个大小写、多一层目录、少一个反斜杠,就直接放弃——它不会 fallback,也不会猜你本意是什么。










