如何使用Doctrine 2和Zend设置自动加载以加载以下目录结构中的实体:
Application
-Modules
--Core
---Models
----Entities
----Repositories
--CMS
---Models
----Entities
----Repositories
我希望能够使用{ModuleName} \ Entities {EntityName}加载类。例如,我希望能够这样做以加载“用户”#39;实体:
$em->getRepository('Core\Entities\User');
对于'页面' 或类似的内容实体:
$em->getRepository('CMS\Entities\Pages');
我可以将其设置为加载CMS \ Models \ Entities \ Pages'但我希望能够知道如何做到这一点,而无需直接映射到目录结构。这可能吗?
答案 0 :(得分:1)
我不知道你如何将Zend Framework和Doctrine2粘合在一起,但如果你使用流行的Bisna胶水(非常酷),你可以在application.ini中设置多个映射目录。仔细查看以下ini设置:
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.0.adapterClass = "Doctrine\ORM\Mapping\Driver\AnnotationDriver"
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.0.mappingNamespace = "Core\Entities"
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.0.mappingDirs[] = APPLICATION_PATH "/modules/Core/Entities"
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.0.annotationReaderClass = "Doctrine\Common\Annotations\AnnotationReader"
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.0.annotationReaderCache = default
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.1.adapterClass = "Doctrine\ORM\Mapping\Driver\AnnotationDriver"
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.1.mappingNamespace = "CMS\Entities"
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.1.mappingDirs[] = APPLICATION_PATH "/modules/CMS/Entities"
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.1.annotationReaderClass = "Doctrine\Common\Annotations\AnnotationReader"
resources.doctrine.orm.entityManagers.default.metadataDrivers.drivers.1.annotationReaderCache = default
像上面这样的东西可以实现你想要的。如果想要能够完全自动执行此操作,我认为您必须修补Bisna \ Doctrine \ Container类。例如,查看定义的模块检查是否存在实体目录并将其添加到doctrine实体管理器。
<强> Bisna 强> 如果您不知道Bisna是什么,这是一个小型库,可以让您轻松地将Doctrine2和Zend Framework 1粘合在一起。
通过观看此视频,您可以轻松了解如何集成Doctrine2。 http://www.zendcasts.com/unit-testing-doctrine-2-entities/2011/02/
请注意,视频中使用的Bisna版本仅支持Doctrine 2.0而不支持2.1,在这种情况下,您应该使用此版本:https://github.com/guilhermeblanco/ZendFramework1-Doctrine2