【问题标题】:Trouble installing Omnipay library with Composer使用 Composer 安装 Omnipay 库时遇到问题
【发布时间】:2013-11-26 23:50:00
【问题描述】:

我正在尝试将 Omnipay API 与 Pin 网关一起使用,但遇到了问题。

我已经在 composer.json 文件中本地运行了 composer.phar:

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

composer“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 文档似乎都使用这种语法。

我尝试了类外的 require 和 use 行,但没有帮助。

感谢大家的帮助。

【问题讨论】:

    标签: php payment-gateway composer-php omnipay


    【解决方案1】:

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

    来自 PHP 文档:

    导入的范围规则

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

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

    【讨论】:

    • 谢谢马修!通过将require "libs/vendor/autoload.php"; use Omnipay\Common\GatewayFactory; 放在我的支付类文件的顶部解决了问题。
    【解决方案2】:

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

    因为它目前是编码的,所以每当您调用 charge 方法时,您都会添加另一个 Composer 自动加载器实例。在一个请求中调用charge 三次(例如,当循环向三个客户计费时)将添加三个自动加载器。这听起来是个坏主意。

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

    特别注意段落说明如果您在 composer.json 文件中定义 Composer 也可以自动加载您自己的类。这确实是一个不错的功能,您再也不需要要求您将要使用的类。

    【讨论】:

      猜你喜欢
      • 2013-12-27
      • 2018-12-26
      • 2017-07-19
      • 2015-07-26
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多