2011-03-29 111 views
0

我正在重构并将我的doctrine2 entites /存储库和代理放入单独的文件夹中。Doctrine2存储库,多个目录

我把它设置为读取多个实体目录,但我与Zend框架整合和我的模型有_命名空间,而不是Admin_Model_Repository_UserApplication\Entity\Repository\User

任何人都有任何指针来管理代理和存储库的多个路径。

回答

0

我不确定代理是什么,但是您可以很容易地指定多个实体和存储库位置。

创建驱动程序时,可以传递单个路径字符串或数组。例如,对于XML:

$driverImpl = new Doctrine\ORM\Mapping\Driver\XmlDriver(array(
    APPLICATION_PATH . '/modules/admin/models', 
    APPLICATION_PATH . '/modules/default/models' 
)); 

或用注释:

$driverImpl = $config->newDefaultAnnotationDriver(array(
    APPLICATION_PATH . '/modules/admin/models', 
    APPLICATION_PATH . '/modules/default/models' 
)); 

这适用于任何映射驱动器。或者,您可以在创建$ driverImpl后调用addPath()。

对于存储库,如果您在映射中指定存储库类,只要自动加载器可以访问它,那么它可以在任何位置工作。

+0

嘿谢谢,是啊我从多个路径读取实体,可能是存储库,但我不确定doctri如何ne加载代理。为了更好的衡量,我让教条创建了代理,但每当我去使用该实体时,我都会得到这个结果:脚本试图执行一个方法或访问一个不完整对象的属性。请确保您尝试操作的对象的类定义“Admin_Model_Admin”已加载_before_ unserialize()被调用' – nopx 2011-03-29 12:00:41

+0

请确保您有一个自动加载器可以加载Admin_Model_Admin。虽然我认为Doctrine在加载映射文件时自己做了。它基本上意味着在加载类之前,类的对象正在被反序列化。 – Gnuffo1 2011-03-29 13:07:10

0

嘿谢谢,你让我走上正轨。我正在使用zend_auth来通过会话存储持久化实体,并且我打电话给getIdentity()->getId(),它不喜欢它。工作正常,没有分开实体dirs,但它没有问题atm,我只是坚持id存储并让我的班级从id重新创建对象。

这似乎是现在的工作,感谢您的帮助

0

我对ZF2

文件module.doctrine_orm.local.config.php解决方案

'drivers' => array(
     'Admin' => array(
      'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 
      'namespace' => 'Admin\Model', 
      'paths' => array('module/Admin/src/Admin/Model') 
     ), 
     'Accounting' => array(
      'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 
      'namespace' => 'Accounting\Model', 
      'paths' => array('module/Accounting/src/Accounting/Model') 
     ) 
    ), 

'orm_driver_chain' => array(
       'parameters' => array(
        'drivers' => array(
         'application_annotation_driver' => $settings['drivers']['Accounting'], 
         'application_annotation_driver2' => $settings['drivers']['Admin'] 
        ), 
        'cache' => $settings['cache'] 
       ) 
      ),