我不确定问题的标题是否正是我想问的问题。
我想在我的Yii应用程序中使用Authorize.net。 Authorize.net有一个由多个类组成的API,为了使API工作,所有类都应该自动加载。在它的SDK中有一个名为autoload.php的文件。请注意,autoload.php不是一个类,它只包含一个函数。这是它的代码:
spl_autoload_register(function($className) {
static $classMap;
if (!isset($classMap)) {
$classMap = require __DIR__ . DIRECTORY_SEPARATOR . 'classmap.php';
}
if (isset($classMap[$className])) {
include $classMap[$className];
}
});
通过在我的代码中要求此文件,我可以成功地使用API。像:
require 'sdk-php-master/autoload.php
//I can make successful API calls after requiring autoload.php to be loaded.
但现在问题是我想在Yii中使用相同的API。我将SDK文件夹放在extensions目录中。现在我需要设置扩展路径才能在我的应用程序中使用它。现在问题是我应该在config.php中为类名设置什么才能使它工作?
我试过了:
'authorize' => array(
'class' => 'application.extensions.authorize.autoload',
),
但这不起作用,因为autoload.php不是一个类,所以不应该这样。应自动加载的所有必需类都放在application.extensions.authorize.lib
目录中。我应该如何在Yii中自动加载所有这些,因为根据我的知识,我们在config.php中只能有一个用于类的条目。
以下是SDK及其目录结构的链接。 Authorize.net SDK
答案 0 :(得分:1)
此库使用composer,我建议你to use composer in your project来管理你的库,你就不会有自动加载的麻烦。
在根项目目录中基本创建composer.json并在其中放置授权部分(以及任何其他内容)
{
"require": {
"authorizenet/authorizenet": "~1.8"
}
}
在你的主要index.php地方:
require '/path/to/vendor/autoload.php';
require $yii
然后致电composer install
。简而言之,关于作曲家this guide的更多细节应该没问题。
<强>更新强>
当您需要一些外部库时,Composer将极大地改善您的工作流程。但是如果你真的不想使用作曲家,那么只需autoload.php
中的index.php
然后在docs中使用此库类。不要将其配置为扩展名 - 此库不是Yii特定的。在任何代码部分中只需使用它,例如:
define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
$subscription = new AuthorizeNet_Subscription;
$subscription->name = "PHP Monthly Magazine";
...
答案 1 :(得分:0)
我找到了解决方法。我刚刚在config main.php中导入了所有必需的文件夹,如下所示:
'import' => array(
'application.extensions.*',
'application.models.*',
'application.components.*',
'application.extensions.authorize.*',
'application.extensions.authorize.lib.*',
'application.extensions.authorize.lib.shared.*',
),
答案 2 :(得分:0)
您可以使用protected/config/main.php
文件中的以下代码自动加载所有Authorize.net文件:
Yii::setPathOfAlias('Authorize', dirname(__FILE__).'/../extensions/sdk-php-master');
Yii::import('Authorize.autoload', true);