composer自动加载需严格按配置规则映射,psr-4前缀须以结尾、路径不能以/开头,文件名与类名大小写及结构必须完全一致,修改后须运行composer dump-autoload生效。

Composer 的自动加载不是“配置完就自动映射所有类”,它只按你声明的规则加载——没声明的路径、没遵循命名规范的文件,require 或 new 时直接报 Class not found。
composer.json 里 autoload 配置写不对,类根本不会被扫到
最常见的是把 "psr-4" 的命名空间前缀写成相对路径,或者末尾多加了 。PSR-4 要求前缀以 结尾(如 "App\": "src/"),但目录路径不能以 / 开头(必须是 "src/",不是 "/src/")。
-
"psr-4": {"App\": "src/"}→ 正确:类AppControllerHome对应src/Controller/Home.php -
"psr-4": {"App": "src/"}→ 错误:缺少结尾反斜杠,Composer 不识别为命名空间前缀 -
"psr-4": {"App\": "./src/"}→ 可能失败:部分旧版本 Composer 对./解析不稳定 - 改完记得运行
composer dump-autoload,否则新配置不生效
类文件名或命名空间和 PSR-4 规则对不上
PSR-4 是严格按命名空间层级映射目录结构的,大小写、下划线、文件扩展名都得一致。比如 AppModelsUser 必须对应 src/Models/User.php,而不是 user.php、User.class.php 或 src/models/user.php(Linux 下大小写敏感会直接失败)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 文件名必须和类名完全一致(含大小写),且扩展名为
.php - 命名空间里的
全部转为目录分隔符,首段命名空间对应autoload中声明的根目录 - 如果用
"classmap",则无视命名规则,但需手动运行composer dump-autoload -o扫描生成映射表
开发中动态新增类却没刷新 autoload,报错后才想起 dump
Composer 不监听文件变化,composer require 或修改 composer.json 后不会自动重生成 vendor/autoload.php。日常开发中加了个新类,运行时抛出 Class 'AppServicesLogger' not found,大概率只是忘了这一步。
- 推荐在
composer.json的"scripts"里加钩子:"post-autoload-dump": "composer dump-autoload"(其实无效,别这么写)——真正有效的是提交前加个 shell 检查,或用 IDE 插件提醒 - 更实际的做法:把
composer dump-autoload加进你的保存后命令(如 VS Code 的 Run on Save 扩展) - 生产环境务必用
composer install --no-dev --optimize-autoloader,否则 classmap 不优化,大量file_exists()拖慢请求
最易忽略的一点:PSR-4 前缀声明支持多个,但顺序重要。Composer 会从上到下匹配,一旦某个前缀能覆盖到类的命名空间,就不再检查后面的。所以通用前缀(如 "" 空字符串映射整个项目)一定要放在最后,否则可能屏蔽掉你精心写的模块前缀。










