我在ZF2中有标准的应用程序模块。它是默认配置的,我没有改变任何东西。我刚刚添加了一些内容:
module/
Application/
src/
Application/
Entity/
Product/
**Product.php**
Controller/
**IndexController.php**
Product.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中。提前谢谢!
答案 0 :(得分:1)
如果将类Product
放在命名空间Application\Entity
中,那么您的目录结构应该是
module/
Application/
src/
Application/
Entity/
**Product.php**
另见PSR-0
答案 1 :(得分:0)
你应该遵循PSR-2。 因此,正确的命名空间实际上是您当前文件夹结构的“Application \ Entity \ Product”。 这意味着你必须做
new \Application\Entity\Product\Product;
或
use Application\Entity\Product\Product;
new Product;
如果您只想要它是Application \ Entity \ Product,那么您应该将文件移动到'Entity'文件夹