我想在我的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命令。