2013-11-26 61 views
1

我試圖將Omnipay API與Pin網關一起使用,但遇到問題。使用Composer安裝Omnipay庫時遇到問題

我這個在composer.json文件在本地運行composer.phar:

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

作曲家「供應商」文件夾現在駐留在我的網站上「班/庫/供應商」。

我有這樣的支付種類:

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文件:

範圍規則導入

使用關鍵字必須在一個文件(全球範圍)或命名空間內聲明的最外層範圍聲明。這是因爲 導入是在編譯時完成的,而不是運行時完成的,因此它不能是 塊範圍。

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

+0

謝謝馬修! 通過將'require'libs/vendor/autoload.php'解決的問題「;使用Omnipay \ Common \ GatewayFactory;'在我的付款類文件的頂部。 – user2036607

2

您濫用作曲家自動加載。在加載任何配置文件或啓動會話之前,您應該將自動加載器包含爲每個請求中最早的文件之一。

由於目前已編碼,因此無論何時撥打charge方法,都需要添加Composer自動加載器的另一個實例。在一個請求中調用charge三次(例如,當爲一個循環中的三個客戶開賬單時)將相互添加三個自動加載器。這聽起來像個壞主意。

請參閱文檔http://getcomposer.org/doc/01-basic-usage.md#autoloading以瞭解應如何包含composer自動裝載機。

尤其要注意段落,指出如果在composer.json文件中定義它,Composer也可以自動加載自己的類。這真是一個很好的功能,你永遠不需要再要求你即將使用的類。