必须同步修改所有硬编码的 require 'vendor/autoload.php' 为新路径,如 require 'third-party/autoload.php';IDE 缓存、框架入口文件及 CI 脚本中同类路径也需人工更新。

composer.json 里 vendor-dir 改了但类还是找不到
vendor 目录路径变更后,vendor/autoload.php 的物理位置变了,但代码里仍写 require 'vendor/autoload.php' 就会直接报错。这不是 Composer 没生效,而是你没同步改掉这行引入。
- 必须把所有
require 'vendor/autoload.php'替换成新路径,比如require 'third-party/autoload.php' -
autoload.files里引用的相对路径(如"src/helpers.php")不受影响;但若用了__DIR__ . '/vendor/autoload.php'这类硬编码,也得手动改 - IDE(如 PhpStorm)可能缓存旧 vendor 路径,需手动触发 “Reload project” 或清空索引
- 某些框架(如 Laravel)在
bootstrap/app.php或入口文件里硬写了 vendor 路径,也要一并检查
运行时动态加 PSR-4 路径为什么无效
用 $loader->addPsr4('App', __DIR__ . '/src/') 却仍 Class not found,大概率是时机或路径写错了。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须在
require 'vendor/autoload.php'之后立即执行,不能在它之前 new 类,也不能在 autoloader 初始化完成前调用 -
__DIR__ . '/src/'是绝对路径,传相对路径(如'src/')会被忽略,不会自动补全 - 命名空间末尾必须带双反斜杠:
'App\'✅,'App'或'App/'❌ - 如果启用了
--classmap-authoritative,所有动态添加的 PSR-4 规则都会被跳过——这是设计行为,不是 bug
bin-dir 改了但 phpunit 还在 vendor/bin 下
不是所有二进制文件都尊重 bin-dir 配置,关键看包怎么声明它的可执行文件。
- 真正受控的是通过
"bin": ["phpunit"]字段声明的命令;这类文件一定生成在bin-dir指向的位置 - 但有些包(如
laravel/installer)靠post-install-cmd脚本复制文件,脚本里写死vendor/bin就绕过了配置 - 验证是否生效:先删掉整个
vendor目录,再跑composer install,观察新生成的 bin 文件在哪 - Windows 下路径含空格或用反斜杠(
.in)会导致 shell wrapper 解析失败,始终用正斜杠、无空格路径,例如./bin
autoload.psr-4 重叠命名空间不生效
写两个 PSR-4 映射,比如 "App\": "src/" 和 "App\Helper\": "vendor/pkg/src/Helper/",后者并不会“覆盖”前者——Composer 不按顺序匹配,而是按最长前缀原则。
- 类
AppHelperUtils会匹配到"App\Helper\"→vendor/pkg/src/Helper/Utils.php,没问题 - 但
AppControllerHome仍走"App\"→src/Controller/Home.php,不会因为 Helper 映射存在就变 - 想让某个路径优先于 vendor,唯一可靠方式是运行时用
$loader->prependPsr4('App\', __DIR__ . '/override/'),插到查找链最前面 - 重复定义同一命名空间多个路径(如
"App\": ["src/", "legacy/"])在 Composer 2.2+ 会直接报错,不再静默忽略
vendor/bin/phpunit 或 vendor/autoload.php ——它们不会随配置自动更新,得人工逐个扫。

















