Zend framework Doctrine2存储库,多个目录

Zend framework Doctrine2存储库,多个目录,zend-framework,doctrine,doctrine-orm,Zend Framework,Doctrine,Doctrine Orm,我正在重构并将我的doctrine2实体/存储库以及可能的代理放在单独的文件夹中 我将其设置为读取多个实体目录,但我正在与zend framework集成,并且我的模型有一个名称空间,Admin\u Model\u Repository\u User而不是Application\entity\Repository\User 任何人都有管理代理和存储库的多个路径的指针。我不确定代理,但您当然可以轻松指定多个实体和存储库位置 创建驱动程序时,可以传递单个路径字符串或数组。例如,对于xml: $dri

我正在重构并将我的doctrine2实体/存储库以及可能的代理放在单独的文件夹中

我将其设置为读取多个实体目录,但我正在与zend framework集成,并且我的模型有一个
名称空间,
Admin\u Model\u Repository\u User
而不是
Application\entity\Repository\User


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

我不确定代理,但您当然可以轻松指定多个实体和存储库位置

创建驱动程序时,可以传递单个路径字符串或数组。例如,对于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()


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

嘿,谢谢,您让我走上了正确的道路。我使用zend_auth通过会话存储持久化实体,并调用了它不喜欢的
getIdentity()->getId()。在不分离实体dir的情况下运行良好,但这没有问题,我只是将id持久化到存储中,并让我的类从id重新创建对象

它现在似乎正在工作,感谢您的帮助

我的ZF2解决方案

在module.doctor\u 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')
        )
    ),


嘿,谢谢,是的,我从多个路径读取实体,可能是存储库,但我不确定doctrine如何加载代理。为了更好地衡量,我让doctrine创建代理,但每当我使用该实体时,我都会得到这样的结果:
脚本试图执行一个方法或访问一个不完整对象的属性。请确保在调用unserialize()之前加载了您试图操作的对象的类定义“Admin\u Model\u Admin”
确保您有一个可以加载Admin\u Model\u Admin的自动加载程序。虽然我认为Doctrine在加载映射文件时会这样做。它基本上意味着类的对象在类本身被加载之前是未序列化的。
'orm_driver_chain' => array(
                'parameters' => array(
                    'drivers' => array(
                        'application_annotation_driver' => $settings['drivers']['Accounting'],
                        'application_annotation_driver2' => $settings['drivers']['Admin']
                    ),
                    'cache' => $settings['cache']
                )
            ),