composer require guzzlehttp/guzzle:^7.0
composer dump-autoload -o
// composer.json 里配置 "autoload": {"psr-4": {"Abc\\Vendor\\": "vendor/"}}
插件单独启用时请求正常,和另一个用 Composer 的插件一起开就报 Call to undefined method GuzzleHttp\Client::sendRequest。错误栈指向的类文件版本号是 6.5。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,两个插件各自打包了一份 Guzzle,先加载的那份占了全局类名,后加载的代码按 7.x 的接口去调用就找不到方法。依赖没做隔离,版本谁先加载谁说了算。
这次卡住的地方就在「插件依赖库版本冲突」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
处理上按这个顺序:用 Composer 给插件依赖加命名空间前缀 把库包进自己的命名空间;两个插件都改不了时 调整加载顺序让需要新版本的那个先跑;临时方案是锁定版本一致的插件组合 关掉自动更新。
改完只确认一件事:两个插件同时启用后请求返回 200,日志里不再出现 undefined method。
