0

如何使用 Doctrine 2 和 Zend 设置自动加载以在以下目录结构中加载实体:

Application
-Modules
--Core
---Models
----Entities
----Repositories
--CMS
---Models
----Entities
----Repositories

我希望能够使用 {ModuleName}\Entities{EntityName} 加载类。例如,我希望能够这样做来加载“用户”实体:

$em->getRepository('Core\Entities\User');

或类似“页面”实体的内容:

$em->getRepository('CMS\Entities\Pages');

我可以将其设置为加载“CMS\Models\Entities\Pages”,但我希望能够知道如何执行此操作,而无需直接映射到目录结构。这可能吗?

4

1 回答 1

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 类。例如,查看定义的模块检查是否存在实体目录并将其添加到学说实体管理器中。

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

于 2011-11-09T22:41:19.620 回答