Использование классов без пространства имен с Yii2
Я хочу использовать проверка SDK С Yii2, но поскольку эта библиотека не поддерживает стандарты PSR-4 (пространства имен), у меня возникли проблемы с его интеграцией. Как я могу использовать эту библиотеку для своих целей?
редактировать
как было предложено, я попытался использовать класс как
$sale = new Twocheckout_Sale();
но все равно я не могу заставить его работать.
2 ответов
когда класс не имеет пространства имен, это означает, что в корневом пространстве имен.
Вариант 1:
use Twocheckout;
...
Twocheckout::format('json');
Вариант 2:
\Twocheckout::format('json');
например, PHPExcel расширение также не имеет пространств имен, на аналогичный вопрос был дан ответ на официальный форум.
вопросы:
импорт класса без пространства имен в пространстве имен класс!--20-->
как использовать пространство имен "root" php?
официальная документация PHP:
http://php.net/manual/en/language.namespaces.fallback.php
обновление:
но 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();
для использования в одном месте это нормально, но если он будет использоваться во многих местах применения, лучше потребовать его в скрипте ввода 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');
Я также рекомендую прочитать советы в официальном documentatiton о использование загруженных библиотек, есть больше вариантов вы можете использовать в зависимости от конкретных библиотека.
/* Try this */
public function actionTest(){
//package
require(Yii::getAlias('@vendor')."/Excel/Spreadsheet_Excel_Reader.php");
$exldata = new \Spreadsheet_Excel_Reader();
}