我正在通过包含使用prestashop6.0的软件包来更新guzzle模块。
Prestashop 1.7使用较旧版本的Guzzle 5。
当我在Prestashop上安装插件时,包含的Guzzle版本与Prestashop冲突,导致以下php错误。
未捕获的PHP异常InvalidArgumentException:“魔术请求方法需要URI和可选的选项数组”在/var/www/html/modules/package/vendorpackage/guzzlehttp/guzzle/src/Client.php第81行{“exception”:“[object ](InvalidArgumentException(code:0):魔术请求方法需要在/var/www/html/modules/package/vendorpackage/guzzlehttp/guzzle/src/Client.php:81)“} []中的URI和可选选项数组
我找到了一些类似问题的其他例子:
基于这些,我对如何解决这个问题有一些想法。这些都不是正确的做法。当然有一种更清洁的方法来处理composer这样的问题?
简短回答:你无能为力。
答案很长:鉴于我处于同样的情况,我找到了解决问题的方法。
如果您的模块依赖于依赖于Guzzle的软件包,并且该软件包在您的控制之下,您可以使您的软件包使用HTTPlug。它是一个抽象,它依赖于其他人包括一个实际的HTTP客户端库。有人也可能是你,包括php-http/client-implementation的不同实现。
随着时间的推移,Prestashop也可能会使用这种方法(以及其他平台),所有这些方法最终都可能依赖于PSR-7 abstractions of HTTP messages。
它不是您当前问题的真正解决方案,而是长期战略,它也可以帮助您现在的位置。
最简单的方法是为guzzle选择一个替代包,但这可能不适合你。
你节省了很多时间
你使用不同的包来做同样的事情。
适度的方法是fork guzzle,然后手动更改名称空间。
你不会在Prestashop中改变任何东西。
如果Prestashop升级到guzzle 6.0,您可以轻松切换到它。
你必须保持自己的定制guzzle。
最难的方法是自己修补Prestashop
你得到你想要的一切。
发送拉取请求,您可能会帮助很多其他人。
如果Prestashop继续使用guzzlehttp 5.0,那么你最终会遇到一个补丁噩梦。
如果我必须使用guzzle,我会选择温和的方式。如果我只想在几行代码中做一些特殊的事情,我会使用另一个包。不,你不能由作曲家安装相同包的不同版本。
问题没有说明主要目标是什么。如果您的主要目标是更新Prestashop(而不是解决特定错误),那么我建议您创建Prestashop环境的本地安装 - 并使用它来手动,逐个文件地更新您的生产环境。我可以通过以下方式完成:
在开始之前,请记住备份软件和数据库。
您可以在模块"guzzlehttp/guzzle": "~5.0",
文件中使用composer.json
,并使用与prestashop相同的版本。