Использование классов без пространства имен с Yii2

Я хочу использовать Checkout SDK с Yii2, но поскольку эта библиотека не поддерживает стандарты PSR-4 (пространства имен), мне трудно интегрировать Это. Как я могу использовать эту библиотеку для своей цели?

ИЗМЕНИТЬ

Как я уже сказал, я пытался использовать класс как

$sale = new \Twocheckout_Sale();

но все же я не могу заставить его работать.

11
задан alwaysLearn 24 янв. '15 в 20:18
источник поделиться
2 ответов

Если класс не имеет пространства имен, это означает его в корневом пространстве имен.

Вариант 1:

use Twocheckout;

...

Twocheckout::format('json');

Вариант 2:

\Twocheckout::format('json');

Например, PHPExcel расширение также не имеет пространств имен, аналогичный вопрос ответил на официальный форум.

Похожие вопросы:

Импортировать класс без пространства имен в класс с расширением имен

Как использовать "root" пространство имен php?

Официальная документация по PHP:

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

Update:

Но PHPExcel имеет собственный автозагрузчик, а 2Checkout - нет. Все классы включены, если требуется один основной абстрактный класс. Он даже упоминается в официальном readme:

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();

Для использования в одном месте это нормально, но если он будет использоваться во многих местах приложения, лучше потребовать его в записи script 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');

Я также рекомендую прочитать советы в официальном документе о с помощью загруженных библиотек, есть больше возможностей, которые вы можете использовать в зависимости от конкретной библиотеки.

9
ответ дан arogachev 24 янв. '15 в 20:57
источник поделиться
/* Try this  */
public function actionTest(){
    //package
    require(Yii::getAlias('@vendor')."/Excel/Spreadsheet_Excel_Reader.php");

    $exldata = new \Spreadsheet_Excel_Reader();


}
0
ответ дан Prahlad 10 февр. '17 в 8:44
источник поделиться

Другие вопросы по меткам