【问题标题】:Zend 2 installation with Composer, autoloader not working使用 Composer 安装 Zend 2,自动加载器不工作
【发布时间】:2015-01-23 17:43:37
【问题描述】:

我正在使用 Composer 为 PHP 项目安装包。我已经为 Google V3 API 成功完成了这项工作; Composer 正确安装了包,设置了 Composer 自动加载器,我可以通过在项目源代码中包含以下语句来引用 Google API 类:

require_once 'vendor/autoload.php';

我尝试对一些 Zend 2 包做同样的事情。 Composer 成功下载并安装了所需的 Zend 包,但是当我尝试在我的代码中引用这些类时,Composer 供应商/自动加载不起作用。 具体来说,Zend 类在 Composer 生成的 vendor/composer/autoload_namespaces.php 文件中被引用,但在 vendor/composer/autoload_classmap.php 中没有被引用,在生成的 vendor/composer/include_paths.php 中也没有被引用 Zend由 Composer(与正确引用的 Google API 不同)。

谁能解释一下为什么 Zend 不能使用 Composer 自动加载器,或者这是预期的行为,我需要为 Zend 使用不同的自动加载机制?

【问题讨论】:

  • 您使用 Composer 安装了 lib,并且包含了 Composer 的自动加载器 - 这就是您需要做的所有事情。您更有可能错误地使用了 ZF2 类,因此请编辑您的问题以包含您遇到的错误以及生成错误的代码,我们应该能够提供更多帮助。

标签: zend-framework2 composer-php include-path


【解决方案1】:

感谢您的回复。 我最终发现问题是因为我没有使用完全限定的命名空间来引用 Zend 类,即

$twitter = new ZendService\Twitter\Twitter($config);

而不是

$twitter = new Twitter($config);

我不明白我通过 Composer 使用的不同库使用不同的类加载方法,例如Composer 在 autoload_classmap.php 中为 Google 客户端 API 生成条目,但在 autoload_namespaces.php 中为 Zend 生成条目,而在 autoload_classmap 中没有任何内容,所以我认为我在安装 Composer 时做错了。

【讨论】:

    【解决方案2】:

    由于 Zend Framework 确实遵循 PSR 标准,它只需要配置 autoload_namespaces.php 中的命名空间。这里没有任何问题...

    【讨论】:

    • 澄清一下,我没有使用 Zend 框架来构建我的应用程序;我在一些独立的 PHP 代码中使用了一些特定的 Zend 类。所以我想要的只是引用 Composer 安装的 Zend 类的最简单方法,而不必编写多个包含语句。如上所述,这对于 Google API 来说非常简单,我假设 Zend 会以同样的方式在 Composer 自动加载器中设置。
    猜你喜欢
    • 2013-12-06
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    • 2017-09-18
    • 2012-12-03
    • 2013-06-19
    相关资源
    最近更新 更多