在我的 Prestashop 项目中,我有几个模块。在其中一个(我们称之为“AWS”)中,我使用 composer(在 PHPStorm 中)安装了 AWS SDK,如 here 所述。 . Composer 已经“需要”,在其他库中,“guzzlehttp”,更新到它的最终版本。
另一方面,还有另一个模块(我们称它为 “orangeConnect”)也带有 composer,它有一个早期版本的“guzzlehttp”。
问题出在我在 php 中使用 AWS SDK 时,在第一个模块的 php 脚本中。发生的事情是它试图调用 URI Composer 类,但它崩溃了。其实是因为没有一类“UriResolver”。问题是,如果我删除“orangeConnect”,那么 AWS SDK 会正确连接,这意味着“AWS”中的 Uri 类由于“orangeConnect”模块而无法正确获取。但是,我迫切需要在项目中支持“orangeConnect”。
总而言之,我如何解决 Prestashop 中 PHP 类之间的冲突,并允许每个模块包含相应有效版本的 guzzleHttp 无冲突 任何类型?
谢谢。
最佳答案
如果orangeConnect
模块的官方维护者不升级代码,那么只有3种方法:
方法 1:您可以维护一份自己的 orangeConnect
代码,并升级到最新的 Guzzle
。通常这不会太难,因为 Guzzle 的界面设计得很好。
方法二:获取旧Guzzle的代码,放入新的命名空间(如:OldGuzzle
),让orangeConnect
使用OldGuzzle
命名空间.您可以通过简单地进行全局正则表达式替换来实现这一点。
方法三:(只针对大系统)把你的PHP应用拆分成微服务模块,将orangeConnect
和AWS SDK
隔离开来,使用不同的 Guzzle
。
关于php - Prestashop 1.6,冲突: 2 different modules requiring same class, 不同版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48385669/