0

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

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

产品.php

namespace Application\Entity;

class Product
{

}

索引控制器.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

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

PS:如果我将 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。先感谢您!

4

2 回答 2

1

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

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

另见PSR-0

于 2013-11-12T07:43:08.133 回答
0

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

new \Application\Entity\Product\Product;

或者

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

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

于 2013-11-12T07:22:02.030 回答