在我的prestashop项目中,我有几个模块。在其中一个(我们称之为“aws”)中,我使用composer(在phpstorm中)安装了aws sdk,如here所述。composer的“required”和其他库“guzzlehttp”已更新到其最终版本。
另一方面,composer还有另一个模块(我们称之为“orangeconnect”),它有一个早期版本的“guzzlehttp”。
问题在于我在php中使用aws sdk时,在第一个模块的php脚本中。结果是它试图调用uri composer类,但它崩溃了。实际上,因为一个类“uriresolver”不存在。问题是,如果我删除“orangeconnect”,那么aws sdk将正确连接,这意味着“aws”中的类uri由于“orangeconnect”模块而无法正确获取。然而,我必须在项目中支持“orangeconnect”。
总之,我如何解决prestashop中php类之间的冲突,并允许每个模块包含相应的guzzlehttp有效版本而不发生任何冲突?
谢谢您.
最佳答案
如果orangeConnect
模块的官方维护人员没有升级代码,则只能采用3种方法:
方法1:您可以维护自己的orangeConnect
代码副本,并升级到最新的Guzzle
。通常不会很难,因为Guzzle的界面设计得很好。
方法2:获取旧guzzle的代码并将其放入一个新的名称空间(例如:OldGuzzle
),并使orangeConnect
使用OldGuzzle
名称空间。您可以通过简单地执行全局regex替换来实现这一点。
方法3:(仅适用于大型系统)将php应用程序划分为微服务模块,分离orangeConnect
和AWS SDK
并使它们使用不同的Guzzle
。