Symfony2:与非命名空间的SDK集成(特别是PayPal)



我已经创建了一个PaypalBundle并将PayPal merchant-php-sdk 添加到我的composer.json中,现在我有一个vendorpaypalmerchant-php-sdk目录。但是这个SDK没有命名空间,似乎不是很OOP访问这些文件的最佳方式是什么?

  • 我应该使用require吗?
  • 我应该对autoloading做什么吗?

我已经研究了使用类似AmazonAPI所做的事情,但 Amazon 代码对定义的命名空间等更 OOP 友好。

第 1 步:Composer.json "存储库"配置

{
    "type": "package",
    "package": {
        "version": "master",
        "name": "paypal/merchant-php-sdk",
        "source": {
            "url": "https://github.com/paypal/merchant-php-sdk.git",
            "type": "git",
            "reference": "master"
        }
    }
}

您可以使用 Composers Classmap Load。

{
    "autoload": {
        "classmap": ["src/", "lib/", "Something.php"]
    }
}

如果要在每个请求中明确要求某些文件,则可以使用文件自动加载机制。

{
    "autoload": {
        "files": ["src/MyLibrary/functions.php"]
    }
}

如果 SDK 在 Packagist 上,那么包作者应该在他们的 composer.json 文件中定义要包含哪些文件;然后,作曲家为您手动包含这些文件。对于他们,您可以从全局命名空间访问它们:

<?php
namespace PathToControllers;
class PaymentsController
{
    public function processAction()
    {
        $paypal = new PayPal();
        // code...
    }
}
  • 我对 https://packagist.org/packages/alchemyai/alchemyapi_php 有同样的问题一个 none 命名空间包,以上都不能解决问题。这是我的解决方案:

  • 不要从包中更改任何内容,作曲家会为我们处理自动加载类映射。

  • 例:

作曲家需要炼金术士/alchemyapi_php"开发大师"

  • 将其类名添加到要使用的文件/类中,如下所示:

使用炼金术API;

  • 正常使用:

$alchemyapi = new AlchemyAPI('jrjeo94j49945hgh92h3493rhf-fake');

  • 最后但最重要的是使用选项运行 Composer(来源:https://github.com/composer/composer/issues/1150):

作曲家转储自动加载 --优化

它会工作,完成。

相关内容

  • 没有找到相关文章

最新更新