2012-11-19 51 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

不幸的是,我仍然有相同的錯誤(只是差異是錯誤消息中類的名稱) –