无法使用Composer安装Omnipay库

时间:2013-11-26 23:50:00

标签: php payment-gateway composer-php omnipay

我正在尝试将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文档似乎都使用这种语法。

我已经尝试过要求并在课堂外使用行,但这没有帮助。

感谢大家的帮助。

2 个答案:

答案 0 :(得分:2)

您必须在类定义之外使用use运算符。

来自PHP文档:

  

导入的范围规则

     

必须在文件(全局范围)或命名空间内部声明的最外层范围内声明use关键字。这是因为   导入是在编译时完成的,而不是运行时,因此不能   块范围。

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

答案 1 :(得分:2)

您滥用Composer自动加载器。您应该将自动加载器作为每个请求中的第一个文件之一,可能在加载任何配置文件或启动会话之前。

当前编码时,只要您调用charge方法,就会添加另一个Composer自动加载器实例。在一个请求中调用charge三次(例如,在循环中为三个客户计费时)将在彼此之上添加三个自动加载器。这听起来不错。

请参阅http://getcomposer.org/doc/01-basic-usage.md#autoloading上的文档,了解如何包含作曲家自动加载器。

特别要注意段落,如果你在composer.json文件中定义它,Composer也可以自动加载你自己的类。这真是一个很好的功能,你再也不需要你要使用的类了。