【问题标题】:ZF2 namespace and file systemZF2 命名空间和文件系统
【发布时间】:2013-11-24 02:11:20
【问题描述】:

我在 ZF2 中有标准的应用程序模块。它是默认配置的,我没有更改任何内容。我只是添加了一些东西:

module/
  Application/
    src/
      Application/
        Entity/
          Product/
            **Product.php**        
        Controller/
          **IndexController.php**

产品.php

namespace Application\Entity;

class Product
{

}

IndexController.php

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Application\Entity\Product;

class IndexController extends AbstractActionController
{
    public function indexAction()
    {       
        $product = new Product();   
    }
}

我收到以下错误:

Fatal error: Class 'Application\Entity\Product' not found in \module\Application\src\Application\Controller\IndexController.php on line 20

我使用相同的命名空间,但它看不到它。为什么?

P.S:如果我将 Product.php 更改为以下内容:

namespace Application\Entity\Product;

class Product
{

}

然后在 IndexController.php 中以下代码将起作用:

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Application\Entity\Product\Product;

class IndexController extends AbstractActionController
{
    public function indexAction()
    {       
        $product = new Product();   
    }
}

更新 我看到我必须遵循 PSR-0 标准,但你能解释一下,这个标准是来自 php 核心还是只是在 ZF2 框架中实现的功能? 我也可以改变这种行为吗?我不是说它很好,我只是想知道它实际上是如何工作的! 例如,我想使用 Application\Entity\Product,而 Product 类位于 /Application/Entity/Product/Product.php。提前谢谢!

【问题讨论】:

    标签: php namespaces zend-framework2 autoload


    【解决方案1】:

    您应该遵循 PSR-2。 因此,对于您当前的文件夹结构,正确的命名空间实际上是“Application\Entity\Product”。 这意味着你必须这样做

    new \Application\Entity\Product\Product;
    

    或

    use Application\Entity\Product\Product;
    new Product;
    

    如果您只希望它是 Application\Entity\Product 那么您应该将文件移动到文件夹 'Entity'

    【讨论】:

    • 关于目录结构的 PSR 实际上是 PSR-0
    • 那么这个标准是来自php核心还是只是ZF2框架中实现的一个功能?
    【解决方案2】:

    如果您将类 Product 放在命名空间 Application\Entity 中,那么您的目录结构应该是

    module/
      Application/
        src/
          Application/
            Entity/
              **Product.php**
    

    另见PSR-0

    【讨论】:

    • 那么这个标准是来自php核心还是只是ZF2框架中实现的一个功能?
    • 它不在 PHP 核心中,但您很可能会在任何框架中找到它,而不仅仅是 ZF2,但这个特定结构是针对 ZF2 的。
    猜你喜欢
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2011-02-07
    • 2018-11-13
    • 1970-01-01
    相关资源
    最近更新 更多