2013-02-08 21 views
2

我使用DoctrineORMModule將Doctrine2與Zend2集成。按照各種示例中的描述使用AnnotationDriver時,一切正常。但是,我無法讓YamlDriver工作。在我的module.config.php我試過:Zend2中的Doctrine2的YamlDriver

'doctrine' => array(
    'driver' => array(
     'ApplicationDriver' => array(
      'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 
      'cache' => 'array', 
      'paths' => array(__DIR__ . '/../src/Application/Entity') 
     ), 
     'YamlDriver' => array(
      'class' => 'Doctrine\ORM\Mapping\Driver\YamlDriver', 
      'cache' => 'array', 
      'extension' => '.dcm.yml', 
      'paths' => array(__DIR__ . '/../src/Application/Mapping') 
     ), 

     'orm_default' => array(
      'drivers' => array(
       'Application\Entity' => 'ApplicationDriver', 
       'Application\Mapping' => 'YamlDriver' 
      ) 
     ) 
    ) 
) 

但是,EntityManager找不到我的類。凸輪你給我一個如何使用教條2和zend2 yaml的工作示例?

回答

3

我假設你的實體在命名空間Application\Entity:這意味着你的驅動程序應該被分配該命名空間,如下面的例子:

'doctrine' => array(
    'driver' => array(
     'MyYamlDriver' => array(
      'class' => 'Doctrine\ORM\Mapping\Driver\YamlDriver', 
      'cache' => 'array', 
      'extension' => '.dcm.yml', 
      'paths' => array(__DIR__ . '/mappings') 
     ), 

     'orm_default' => array(
      'drivers' => array(
       'Application\Entity' => 'MyYamlDriver', 
      ) 
     ) 
    ) 
) 

基本上,配置一個特定命名的驅動程序映射到你想要一個命名空間使用。在這種情況下,MyYamlDriver被分配來處理命名空間的任何映射Application\Entity

+0

只是可以肯定的是,無論驅動程序如何,我都必須使用實體類。 Yaml只是註釋的替代品,而不是整個班級的獲得者和製片人? – ACNB 2013-02-09 09:38:51

+0

映射只是您的POPO(Plain Old PHP Objects)的裝飾器。驅動程序只是獲取這些映射的一種方式:它不會以任何方式影響類的行爲。映射隻影響ObjectManager如何處理POPO的持久性 – Ocramius 2013-02-09 15:42:41