学说2自动加载

时间:2011-11-09 20:57:55

标签: zend-framework doctrine-orm zend-autoloader

如何使用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'但我希望能够知道如何做到这一点,而无需直接映射到目录结构。这可能吗?

1 个答案:

答案 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