簡體   English   中英

無法使用Composer安裝Omnipay庫

[英]Trouble installing Omnipay library with Composer

我正在嘗試將Omnipay API與Pin網關一起使用但存在問題。

我在composer.json文件中使用this運行composer.phar:

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

作曲家“vendor”文件夾現在位於我的網站上的“classes / libs / vendor”中。

我有這個付款類:

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文檔似乎都使用這種語法。

我已經嘗試過要求並使用課外線,但這沒有用。

謝謝大家的幫助。

您必須在類定義之外使用use運算符。

從PHP文檔:

導入的范圍規則

use關鍵字必須在文件的最外層范圍 (全局范圍)或命名空間內聲明中聲明。 這是因為導入是在編譯時完成的,而不是運行時,所以它不能是塊作用域。

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

您正在濫用Composer自動加載器。 您應該將自動加載器作為每個請求中的第一個文件之一,可能在加載任何配置文件或啟動會話之前。

由於它是當前編碼的,因此每當您調用該charge方法時,都會添加Composer自動加載器的另一個實例。 在一個請求中調用三次charge (例如,在循環中為三個客戶計費時)將在彼此之上添加三個自動加載器。 這聽起來像個壞主意。

請參閱http://getcomposer.org/doc/01-basic-usage.md#autoloading上的文檔,了解如何包含composer自動加載器。

特別要注意段落,如果你在composer.json文件中定義它,Composer也可以自動加載你自己的類。 這真的是一個很好的功能,你再也不需要要使用你要使用的類了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM