我开始开发新的应用程序,这是我第一个用ZF2编写的应用程序。我有一些关于使用 Doctrine1 进行 ZF1 应用的经验,但现在我想使用 ZF2 和 Doctrine2 进行应用。默认实体文件夹位于模块目录中。我想要一个模型文件夹,它在整个应用程序中共享。所以我准备了这样的应用程序结构:
config
models
generated
module
Administration
Application
public
vendor
我设计了数据库(MySQL)并将其导入XML形式,使用Doctrine CLI。我还生成了模型。但是现在我遇到了问题 - 如何在我的模块中使用它?我准备了一些代码:
protected $em;
public function setEntityManager(EntityManager $em)
{
$this->em = $em;
}
public function getEntityManager()
{
if (null === $this->em) {
$this->em = $this->getServiceLocator()->get('DoctrineORMEntityManager');
}
return $this->em;
}
public function indexAction()
{
return new ViewModel(array(
'carriers' => $this->getEntityManager()->getRepository('Carrier')->findAll()
));
}
而且我有一个错误"找不到类承运人"。这是路径的问题,但我完全是 ZF2 的新手,我不知道如何配置它......
您可以在配置中定义原则 2 实体的路径。现在我假设您有一个类似于下面的配置:
'doctrine' => array(
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'DoctrineORMMappingDriverAnnotationDriver',
'cache' => 'array',
'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . 'Entity' => __NAMESPACE__ . '_driver'
)
)
)
)
基本上,您所要做的就是正确映射路径。在orm_defaults
中,您可以单独定义每个模块的驱动程序,也可以仅使用全局驱动程序。
在__NAMESPACE__ . '_driver'
中,您可以使用给定名称定义驱动程序,并定义实体的确切存储位置。在您的情况下,这可能是类似的
'paths' => array(__DIR__ . '/../src/Administration/Entity')
或者您的模块在存储实体的位置命名的任何名称。在这种情况下Administration
此外,请始终分配完全限定的存储库名称,如下所示:
->getRepository('NAMESPACEEntityCarrier')