【问题标题】:Zend Framework 2 Namespace ambiguityZend Framework 2 命名空间歧义
【发布时间】:2013-06-10 19:30:10
【问题描述】:

我正在使用 Zend Framework 2 中的 Zend/Http 为 Jambase 编写 API。这是我的文件夹结构。

Jambase
|---composer.json
|---composer.phar
|---src
|----Jambase
|------|Service
|---------|Jambase.php
|---vendor
|-----|bin
|-----|composer
|-----|zendframework
|--------|zendframework
|-----------|library
|--------------|Zend
|----------------|Http
|--------------
|----vendor

所以基本上我的 api sdk 类在服务文件夹下的 Jambase.php 中。因为我有这样的标题, 命名空间 Jambase\Service;

use Zend\Authentication\Adapter\AdapterInterface,
    Zend\Authentication\Result,
    Zend\Http\Client,
    Zend\Json\Json;

运行应用程序时出现错误提示,

Fatal error: Class 'Zend\Http\Client' not found in /usr/local/zend/apache2/htdocs/jambaseclient-php/src/Jambase/Service/Jambase.php

我知道这是命名空间或自动加载问题,有人可以帮忙吗? 它适用于绝对路径。不是相对路径。

【问题讨论】:

  • Module.php 文件的命名空间是什么?

标签: php namespaces zend-framework2 autoload


【解决方案1】:

您有一个可通过 composer 加载的结构,因为我在您的项目中看到了一个 composer.json 文件。确实存在自动加载问题,您可以通过 composer 解决此问题。

关键是,php 必须知道你有可用的Zend\Http\Client 类,但你必须告诉 php 它在/usr/local/zend/apache2/htdocs/jambaseclient-php/vendor/zendframework/zendframework\library\Zend\Http\Client.php 下可用。

vendor 目录中有一个名为autoload.php 的文件。在您的应用程序中,当您启动它时,您必须加载此文件。然后,您可以像现在一样加载所有 Zend Framework 2 代码。

为了进一步帮助您,请解释您对“运行应用程序时”的具体操作,以便清楚地了解您是否以及如何解决自动加载问题。

【讨论】:

  • 抱歉这里的错字,所以基本上我得到了一个 Json 数组并试图在表格中打印出来。这就对了。我所有的代码都在一个文件中,因为它是一个非常小的 php SDK。因此,当我创建一个 http 客户端类时,我会收到一条错误消息,如我之前的问题所示。
  • 好吧,另一种解决方案:如果您通过composer加载了组件(我看到了composer.json)并且在该composer中指定了依赖项,请在您的应用程序中使用composer加载您的服务。这也将解决自动加载问题。
猜你喜欢
  • 2012-06-07
  • 1970-01-01
  • 2015-11-04
  • 2012-07-26
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多