11

我想将Checkout SDK与 Yii2 一起使用,但由于该库不支持 PSR-4 标准(命名空间),因此我无法集成它。我怎样才能将这个库用于我的目的?

编辑

正如建议的那样,我尝试使用类作为

$sale = new \Twocheckout_Sale();

但我仍然无法使其工作。

4

2 回答 2

9

当类没有命名空间时,这意味着它在根命名空间中。

选项1:

use Twocheckout;

...

Twocheckout::format('json');

选项 2:

\Twocheckout::format('json');

例如,PHPExcel扩展也没有命名空间,在官方论坛上回答了类似的问题。

相关问题:

将没有命名空间的类导入命名空间类

如何使用 php 的“root”命名空间?

官方 PHP 文档:

http://php.net/manual/en/language.namespaces.fallback.php

更新:

但是PHPExcel有自己的自动加载器,虽然2Checkout没有。通过需要一个主要的抽象类来包含所有类。它甚至在官方自述文件中提到:

require_once("/path/to/2checkout-php/lib/Twocheckout.php");

所以你需要在使用库类之前手动包含它。可以借助别名来避免写入完整路径。

use Yii;
...
$path = Yii::getAlias("@vendor/2checkout/2checkout-php/lib/Twocheckout.php");
require_once($path);
$sale = new \Twocheckout_Sale();

在一个地方使用是可以的,但是如果它会在很多地方使用,最好在入口脚本中要求它index.php

require(__DIR__ . '/../../vendor/autoload.php');

require(__DIR__ . '/../../vendor/2checkout/2checkout-php/lib/Twocheckout.php');

require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/../../common/config/bootstrap.php');
require(__DIR__ . '/../config/bootstrap.php');

我还建议阅读官方文档中有关使用下载库的提示,根据具体的库,您可以使用更多选项。

于 2015-01-24T17:57:55.190 回答
0
/* Try this  */
public function actionTest(){
    //package
    require(Yii::getAlias('@vendor')."/Excel/Spreadsheet_Excel_Reader.php");

    $exldata = new \Spreadsheet_Excel_Reader();


}
于 2017-02-10T05:44:41.597 回答