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

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

РЕДАКТИРОВАТЬ

Как и предполагалось, я пытался использовать класс как

$sale = new \Twocheckout_Sale();

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

11

Решение

Когда у класса нет пространства имен, это означает, что он находится в корневом пространстве имен.

Опция 1:

use Twocheckout;

...

Twocheckout::format('json');

Вариант 2:

\Twocheckout::format('json');

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

Смежные вопросы:

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

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

Официальная документация 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');

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

9

Другие решения

/* Try this  */
public function actionTest(){
//package
require(Yii::getAlias('@vendor')."/Excel/Spreadsheet_Excel_Reader.php");

$exldata = new \Spreadsheet_Excel_Reader();}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector