2013-11-26 2 views
1

Я пытаюсь использовать API Omnipay с шлюзом Pin, но с проблемами.Неисправность установки библиотеки Omnipay с Composer

Я запускать composer.phar локально с этим в файле composer.json:

{ 
    "require": { 
     "omnipay/omnipay": "~2.0" 
    } 
    } 

Папка «поставщик» композитор в настоящее время проживает в «классы/Libs/поставщика» на моем сайте.

У меня есть этот класс оплаты:

class Payment extends BasicClass { 
    public function charge() { 
     require "libs/vendor/autoload.php"; 

     use Omnipay\Omnipay; 

     $gateway = GatewayFactory::create('Pin'); 
     $gateway->setSecretKey($this->config->secretKey); 
    } 
} 

При вызове:

$topup = new Payment(); 
$topup->charge(); 

я получаю ошибку синтаксического анализа, PHP полемизирует с моей use Omnipay\Omnipay линии.

Очень смущенный, поскольку вся документация Omnipay, похоже, использует этот синтаксис.

Я пробовал использовать и использовать линии вне класса, но это не помогло.

Спасибо за помощь всем.

ответ

2

Вы должны использовать оператор use вне определения класса.

От PHP документации:

правила Scoping для импорта

варианта использования ключевого слова должны быть объявлены во внешнем объеме файла (глобальный охват) или внутри объявления пространства имен. Это связано с тем, что импорт выполняется во время компиляции, а не во время выполнения, поэтому он не может быть блочным областью.

http://php.net/manual/en/language.namespaces.importing.php#language.namespaces.importing.scope

+0

Thanks Matthew! Проблема решена путем установки 'require 'libs/vendor/autoload.php"; используйте Omnipay \ Common \ GatewayFactory; 'вверху моего файла класса оплаты. – user2036607

2

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

Как он в настоящее время кодируется, вы добавляете еще один экземпляр автозагрузчика Composer всякий раз, когда вы совершаете вызов этого метода charge. Вызов charge три раза за один запрос (например, при выставлении счетов трем клиентам в цикле) добавит три автозагрузчика друг на друга. Это звучит неплохо.

Обратитесь к документации по адресу http://getcomposer.org/doc/01-basic-usage.md#autoloading, чтобы узнать, как включить автозагрузчик композитора.

Особенно обратите внимание на абзац, в котором указано, что Composer также может автозагружать ваши собственные классы, если вы определяете его в своем файле composer.json. Это действительно приятная функция, вам больше не придется требовать классов, которые вы собираетесь использовать.

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