Prestashop Guzzle冲突

问题描述 投票:8回答:4

我正在通过包含使用6.0的软件包来更新模块。

Prestashop 1.7使用较旧版本的Guzzle 5。

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

未捕获的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和可选选项数组

我找到了一些类似问题的其他例子:

基于这些,我对如何解决这个问题有一些想法。这些都不是正确的做法。当然有一种更清洁的方法来处理这样的问题?

  • 从包含的包中删除Guzzle - 这是最简单的一个,我的问题是如果我删除这个依赖关系它停止了什么,说什么其他依赖关系不会在以后删除不能删除的行?
  • 可以检查Guzzle的包版本和交换调用取决于哪一个加载 - 类似于上面的问题我可以修复以确定我应该使用哪种类型的调用此错误,但我不能告诉其他问题这可能加注,我的代码最终可能会出现每个版本的语句。
  • 手动更改插件中guzzle的名称空间。所以我可以进入我的包的vendor文件夹并为包强制一个特定的命名空间,我猜这将解决我的问题,但我正在失去安装可重用包的重点。
  • Fork Guzzle并参考该版本。我可以将guzzle插入并将其作为VCS包包含在插件中。这里的问题是我必须继续保持前进。
php composer-php prestashop guzzle prestashop-1.7
4个回答
0
投票

简短回答:你无能为力。

答案很长:鉴于我处于同样的情况,我找到了解决问题的方法。

如果您的模块依赖于依赖于Guzzle的软件包,并且该软件包在您的控制之下,您可以使您的软件包使用HTTPlug。它是一个抽象,它依赖于其他人包括一个实际的HTTP客户端库。有人也可能是你,包括php-http/client-implementation的不同实现。

随着时间的推移,Prestashop也可能会使用这种方法(以及其他平台),所有这些方法最终都可能依赖于PSR-7 abstractions of HTTP messages

它不是您当前问题的真正解决方案,而是长期战略,它也可以帮助您现在的位置。


-1
投票

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

  • 优点

你节省了很多时间

  • 缺点

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

适度的方法是fork guzzle,然后手动更改名称空间。

  • 优点

你不会在Prestashop中改变任何东西。

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

  • 缺点

你必须保持自己的定制guzzle。

最难的方法是自己修补Prestashop

  • 优点

你得到你想要的一切。

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

  • 缺点

如果Prestashop继续使用guzzlehttp 5.0,那么你最终会遇到一个补丁噩梦。

结论

如果我必须使用guzzle,我会选择温和的方式。如果我只想在几行代码中做一些特殊的事情,我会使用另一个包。不,你不能由作曲家安装相同包的不同版本。


-1
投票

问题没有说明主要目标是什么。如果您的主要目标是更新Prestashop(而不是解决特定错误),那么我建议您创建Prestashop环境的本地安装 - 并使用它来手动,逐个文件地更新您的生产环境。我可以通过以下方式完成:

  1. 在本地计算机上的目标版本(1.7.5?)中创建一个全新的Prestashop安装(使用新数据库)。 Composer将确保两个安装使用相同的依赖项。
  2. 备份生产数据库,并在本地数据库服务器上还原它。
  3. 重新配置本地Prestashop以与本地数据库通信。
  4. 升级本地Prestashop。检查此更新的安装是否有效。
  5. 使用diff工具(例如,Beyond Compare)将本地安装与远程安装进行比较。两个安装之间的任何差异都需要逐个处理: 将新的/更新的代码从本地安装复制到远程安装。 从远程安装中删除任何过时的文件。
  6. 更新生产数据库。

在开始之前,请记住备份软件和数据库。


-2
投票

您可以在模块"guzzlehttp/guzzle": "~5.0",文件中使用composer.json,并使用与prestashop相同的版本。

© www.soinside.com 2019 - 2024. All rights reserved.