Я хочу использовать Checkout 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(); }