Я хочу использовать Оформить заказ SDK с Yii2, но так как эта библиотека не поддерживает стандарты PSR-4 (пространства имен), у меня возникли проблемы с ее интеграцией. Как я могу использовать эту библиотеку для своих целей?
РЕДАКТИРОВАТЬ
Как и предполагалось, я пытался использовать класс как
$sale = new \Twocheckout_Sale();
но я все еще не могу заставить его работать.
Когда у класса нет пространства имен, это означает, что он находится в корневом пространстве имен.
Опция 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');
Я также рекомендую прочитать советы в официальном документе о используя загруженные библиотеки, Есть несколько вариантов, которые вы можете использовать в зависимости от конкретной библиотеки.
/* Try this */
public function actionTest(){
//package
require(Yii::getAlias('@vendor')."/Excel/Spreadsheet_Excel_Reader.php");
$exldata = new \Spreadsheet_Excel_Reader();}