2015-01-24 1 views
11

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

EDIT

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

$sale = new \Twocheckout_Sale(); 

, но до сих пор я не могу заставить его работать.

+0

И какая ошибка? – arogachev

+0

класс @arogachev не найден, и когда я пытаюсь включить его вручную, он говорит, что не может его обновить. – alwaysLearn

+0

Убедитесь, что у вас установлено расширение, и файлы существуют в папке поставщика. – arogachev

ответ

9

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

Вариант 1:

use Twocheckout; 

... 

Twocheckout::format('json'); 

Вариант 2:

\Twocheckout::format('json'); 

Например, PHPExcel расширение также не имеет пространства имен, подобный вопрос был дан на official forum.

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

Importing class without namespace to namespaced class

How to use "root" namespace of 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(); 

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

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

+0

Спасибо, я попробую и надеюсь, что это сработает :-) – alwaysLearn

+0

См. Редактирование. Я не могу заставить его работать :( – alwaysLearn

+1

Его работа сейчас .. Спасибо :)) – alwaysLearn

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

    $exldata = new \Spreadsheet_Excel_Reader(); 


}