Prestashop 1.6,冲突:2个不同的模块需要相同的类,不同的版本

时间:2018-01-22 16:01:43

标签: php amazon-web-services amazon-s3 prestashop-1.6 guzzle

在我的Prestashop项目中,我有几个模块。在其中一个中(让我们称之为" AWS")我使用composer(在PHPStorm中)安装 AWS SDK ,如here所述。 Composer已经" required"以及其他库," guzzlehttp",更新到最终版本。

另一方面,还有另一个模块(让我们称之为" orangeConnect" )也有作曲家,它有一个早期版本的" guzzlehttp&#34 ;.

问题在于我在php中使用AWS SDK,在第一个模块中的php脚本中。会发生什么,它试图调用URI Composer类并崩溃。实际上,因为一个班级" UriResolver"不存在。问题是如果我删除" orangeConnect"然后AWS SDK正确连接,这意味着类Uri,在" AWS"由于" orangeConnect"未被正确使用模块。但是,我迫切需要支持" orangeConnect"在项目中。

总之,解决Prestashop中PHP内的类之间的冲突,并允许每个模块包含相应的guzzleHttp 的有效版本无冲突

谢谢。

1 个答案:

答案 0 :(得分:1)

如果orangeConnect模块的官方维护者没有升级代码,则只能采用3种方法:

方法1:您可以维护自己的orangeConnect代码的副本,并升级到最新的Guzzle。通常,这并不困难,因为Guzzle的界面设计合理。

方法2:获取旧的Guzzle代码并将其放入新的命名空间(例如:OldGuzzle)中,并使orangeConnect使用OldGuzzle命名空间。您可以通过简单地执行全局正则表达式替换来实现此目的。

方法3 :(仅适用于大型系统)将PHP应用程序划分为微服务模块,并隔离orangeConnectAWS SDK,并使它们使用不同的Guzzle