PayPal SDK类名称冲突



我想在我的cakephp 2.4.x应用程序中使用贝宝自适应付款和贝宝自适应帐户libs。我正在通过作曲家加载它们。我的composer.json文件看起来像这样:

{
"require": {
    "paypal/adaptivepayments-sdk-php":"v3.6.106",
    "paypal/adaptiveaccounts-sdk-php":"v3.6.106"
},
"config": {
    "vendor-dir": "Vendor"
}
}

两个Lib都包含paypal/type/common/requestenvelope.php,对于每个lib,它们都不同。我正在与此类名称遇到冲突,其中未使用正确的名称。我相信解决方案是在我的composer.json中使用自动加载。我已经阅读了文档,并且不相信我正确使用它。这是我正在尝试的:

{
"require": {
    "paypal/adaptivepayments-sdk-php":"v3.6.106",
    "paypal/adaptiveaccounts-sdk-php":"v3.6.106"
},
"config": {
    "vendor-dir": "Vendor"
},
"autoload": {
    "psr-4": {
        "AdaptivePaymentsLib\": "Vendor/paypal/adaptivepayments-sdk-php/lib",
        "AdaptiveAccountsLib\": "Vendor/paypal/adaptiveaccounts-sdk-php/lib"
    }
}
}

,在我的控制器中,我试图以这样的方式调用RequestEnvelope:

$ requestenvelope = new AdjativePaymentsLib paypal types common common requestenvelope(" en_us");

没有找到它。活动帐户直到最近才添加到该项目中。以前获得请求信封与$ requestenvelope = new PayPal type common common requestenvelope(" en_us");因此,只有增加了账户,才提出了冲突并造成了破坏。

您不应该为依赖项定义自动加载 - 这是他们解决的任务。

如果您查看paypal/paypal/audaptivepayments-sdk-php的composer.json文件,您会看到:

"autoload": {
    "psr-0": {
        "PayPal\Service": "lib/",
        "PayPal\Types": "lib/"
    }
}

如果您在PayPal/AdaptiveAccounts-SDK-PHP中查看相同的文件,请看到:

"autoload": {
    "psr-0": {
        "PayPal\Service": "lib/",
        "PayPal\Types": "lib/"
    }
}

安装后,作曲家使用此内容创建一个文件vendor/composer/autoload_namespaces.php

return array(
    'PayPal\Types' => array($vendorDir . '/paypal/adaptivepayments-sdk-php/lib', $vendorDir . '/paypal/adaptiveaccounts-sdk-php/lib'),
    'PayPal\Service' => array($vendorDir . '/paypal/adaptivepayments-sdk-php/lib', $vendorDir . '/paypal/adaptiveaccounts-sdk-php/lib'),
    'PayPal' => array($vendorDir . '/paypal/sdk-core-php/lib'),
);

因此,这两个库都在这里包括,我毫不怀疑自动加载将起作用。

您无法真正对具有不同内容的重复类做些事情。您在Github上打开了问题吗?如果没有使开发人员团队意识到这个问题,它将永远无法解决。

作为黑客,您可以定义一个删除这些文件之一的后安装和更新后的脚本。有关更多详细信息,请参见作曲家文档。作曲家接受任何Shell命令或对PHP类的静态调用。我会在这里使用shell命令。

相关内容

  • 没有找到相关文章

最新更新