cakephp - Paypal SDK类名冲突

标签 cakephp paypal composer-php

我想在我的 CakePHP 2.4.x 应用程序中使用 Paypal Adaptive Payments 和 Paypal Adaptive Accounts 库。我正在通过 Composer 加载它们。我的 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 并且每个库都不同。我遇到了与未使用正确名称的此类名称的冲突。我相信解决方案是在我的 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"
    }
}
}

在我的 Controller 中,我试图像这样调用 RequestEnvelope:

$requestEnvelope = new AdaptivePaymentsLib\PayPal\Types\Common\RequestEnvelope("en_US");

没有找到。事件帐户最近才添加到项目中。以前使用 $requestEnvelope = new PayPal\Types\Common\RequestEnvelope("en_US"); 获取请求信封效果很好;所以只是添加了出现冲突并导致损坏的帐户。

最佳答案

你不应该为你的依赖定义自动加载——这是他们要解决的任务。

如果您查看 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 上开了一个问题吗?如果不让开发团队意识到这个问题,它永远不会得到解决。

作为 hack,您可以定义一个安装后和更新后脚本来删除其中一个文件。参见 the composer documentation更多细节。 Composer 接受任何 shell 命令或对 PHP 类的静态调用。我会在这里使用 shell 命令。

关于cakephp - Paypal SDK类名冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21393801/

相关文章:

unit-testing - 在没有 Composer 的情况下使用 phpunit

paypal - 在沙盒中为 Payments Pro 设置定期计费

paypal - Sandbox Payflow Gateway API 调用超时

loops - Paypal DoCapture 批处理循环

composer-php - 通过 composer 安装 yii2 并不断提示输入密码

mysql - cakephp 和 PDO 限制错误

jquery - CakePHP 提交 ajax 添加操作后取消重定向到 View

php - 进行ajax调用时如何在cakephp中的过滤器之前跳过

mysql - CakePHP 2 应用程序在本地工作正常,但在运行时返回数据库错误?

Git - 供应商文件夹修改 - .gitignore?