Zend framework Doctrine2存储库,多个目录
我正在重构并将我的doctrine2实体/存储库以及可能的代理放在单独的文件夹中 我将其设置为读取多个实体目录,但我正在与zend framework集成,并且我的模型有一个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
名称空间,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']
)
),