2012-11-19 57 views
1

我开始开发新的应用程序,这是我用ZF2编写的第一个应用程序。我对使用Doctrine1进行ZF1应用有一些经验,但现在我想使用ZF2和Doctrine2进行应用。 默认实体文件夹位于模块目录中。我想有一个模型文件夹,它在整个应用程序中共享。所以我准备了这样的应用程序结构:ZF +主义 - 模型文件夹的本地化本地化

config 
models 
generated 
module 
Administration 
Application 
public 
vendor 

我设计了数据库(MySQL)并使用Doctrine CLI将它导入到XML表单。我也生成了模型。但现在我有问题 - 如何在我的模块中使用它?我准备了一些代码:

protected $em; 

public function setEntityManager(EntityManager $em) 
{ 
    $this->em = $em; 
} 

public function getEntityManager() 
{ 
    if (null === $this->em) { 
     $this->em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager'); 
    } 
    return $this->em; 
} 

public function indexAction() 
{ 
    return new ViewModel(array(
     'carriers' => $this->getEntityManager()->getRepository('Carrier')->findAll() 
    )); 
} 

而且我有一个错误'Class Carrier not found'。这是一个路径问题,但我在ZF2中是全新的,我不知道如何配置它......

回答

0

您可以在配置中定义Doctrine 2实体的路径。现在我假设你有一个类似于这样的配置:

'doctrine' => array(
    'driver' => array(
     __NAMESPACE__ . '_driver' => array(
      'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 
      '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('NAMESPACE\Entity\Carrier') 
+0

我已经把这个代码到我的模块/应用/配置/ module.config.php: \t“教义 '=>数组( \t 'orm_autoload_annotations'=>真, \t '司机'=>数组( \t __NAMESPACE__。 '_driver'=>数组( \t '类'=>' 学说\ ORM \映射\驱动\ XmlDriver', \t'cache'=>'array', \t'paths'=> array(__ DIR__。 '/../../../models') \t) \t 'orm_default'=>数组( \t '司机'=>数组( \t __NAMESPACE__。 '\实体'=> __NAMESPACE__。“_driver ' \t) \t) \t) 但仍然出现上述错误。 –

+0

请参阅更新的答案,错误可能只是错误的方法来调用存储库 – Sam

+0

不幸的是,我仍然有相同的错误(只是差异是错误消息中类的名称) –