php - Prestashop Guzzle 冲突

标签 php composer-php prestashop guzzle prestashop-1.7

我正在更新 包含一个使用 的包的模块6.0.

Prestashop 1.7 使用旧版本的 Guzzle 5。

当我在 Prestashop 上安装插件时,包含的 Guzzle 软件包版本与 Prestashop 冲突,导致以下结果 错误。

Uncaught PHP Exception InvalidArgumentException: "Magic request methods require a URI and optional options array" at /var/www/html/modules/package/vendorpackage/guzzlehttp/guzzle/src/Client.php line 81 {"exception":"[object] (InvalidArgumentException(code: 0):Magic request methods require a URI and optional options array at /var/www/html/modules/package/vendorpackage/guzzlehttp/guzzle/src/Client.php:81)"} []

我发现了一些类似问题的其他示例:

基于这些,我对如何解决这个问题有了一些想法。这些都不是正确的方法。使用 肯定有更简洁的方法来处理此类问题?

  • 从包含的包中删除 Guzzle - 这是最简单的一个,我的问题是,如果我删除这个依赖项,它会在哪里停止,也就是说任何其他依赖项都不会发生冲突以后不能删除的线?

  • 可以检查包中 Guzzle 的版本并根据加载的调用交换调用 - 与上面的问题类似,我可以破解一个修复程序以确定我应该使用哪种类型的调用对于这个错误,但我不知道这可能会引发什么其他问题,而且我的代码最终可能会到处都是针对每个版本的语句。

  • 在插件中手动更改 guzzle 的命名空间。所以我可以进入我的包的 vendor 文件夹并为包强制一个特定的命名空间,我猜这会解决我的问题,但我失去了安装可重复使用的包的意义。

  • Fork Guzzle 并引用那个版本。我可以 fork guzzle 并将其作为 VCS 包包含在插件中。这里的问题是,我必须继续保持前进。

最佳答案

最简单的方法是为 guzzle 选择一个替代包,但这可能不是最适合您的。

  • 优点

你节省了很多时间

  • 缺点

你使用不同的包来做同样的事情。

中等 方法是 fork guzzle,然后手动更改 namespace 。

  • 优点

您不会在 Prestashop 中更改任何内容。

如果 Prestashop 升级到 guzzle 6.0,您可以轻松切换到它。

  • 缺点

您必须维护自己定制的喷口。

最难的方法是自己给 Prestashop 打补丁

  • 优点

你得到你想要的一切。

发送拉取请求,您可能会帮助很多其他人。

  • 缺点

如果 Prestashop 继续使用 guzzlehttp 5.0,您将陷入修补噩梦。

结论

如果我必须使用guzzle,我会选择适度的方式。如果我只是想在几行代码中做一些特别的事情,我会使用替代包。 而且您不能通过 Composer 安装同一包的不同版本。

关于php - Prestashop Guzzle 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53831504/

相关文章:

php - 在 MySQL 数据库中编辑值

PHP检查是否设置了数组索引并且没有超出范围

java - 我在哪里可以找到多种语言的正则表达式的单元测试?

php - 图像未在 codeigniter 中使用 jquery 上传

php - Composer(Laravel5) 无法解码响应 : zlib_decode(): data error

php - 如果满足条件,Composer 会自动加载包

php - 将 Sylius Bundles 安装到 Symfony 2.4 时出现 Composer 依赖错误

mysql - 触发 SQL Prestashop

jquery - 通过 jquery 添加 css 样式值

php - 如何结合 Prestashop (PHP) 和 DjangoCMS (Python)