我想在CakePHP 2.4.x应用程序中使用Paypal Adaptive Payments和Paypal Adaptive Accounts库。我正在通过作曲家加载它们。我的composer.json文件如下所示:
{
"require": {
"paypal/adaptivepayments-sdk-php":"v3.6.106",
"paypal/adaptiveaccounts-sdk-php":"v3.6.106"
},
"config": {
"vendor-dir": "Vendor"
}
}
这两个库都包含Paypal / Types / 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 AdaptivePaymentsLib \ PayPal \ Types \ Common \ RequestEnvelope(“en_US”);
没有被发现。 Active Accounts最近才被添加到项目中。以前使用$ requestEnvelope = new PayPal \ Types \ Common \ RequestEnvelope(“en_US”)获取请求信封的工作正常;因此,只有增加了冲突并导致破裂的账户。
答案 0 :(得分:1)
您不应该为依赖项定义自动加载 - 这是他们要解决的任务。
如果您查看paypal / adaptivepayments-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/"
}
}
安装完成后,Composer会使用以下内容创建文件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上打开了一个问题吗?如果没有让开发团队意识到这个问题,它就永远不会得到解决。
作为一个黑客,您可以定义一个安装后和更新后的脚本,删除其中一个文件。有关详细信息,请参阅the composer documentation。 Composer接受任何shell命令或对PHP类的静态调用。我会在这里使用shell命令。