我已经创建了一个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):
作曲家转储自动加载 --优化
它会工作,完成。