Doctrine2+Symfony2:如何将实体和映射存储在单独的bundle中


Doctrine2+Symfony2: How can I store entities and mappings in separate bundles?

我想解耦我的应用程序,所以我可以使用我的实体在任何地方,无论他们的数据源可能。

我把实体放到

DataAccessLayerBundle '实体

中的映射

DataProvider ' config ' ' DataBaseBundle '资源学说

问题:

当我尝试以下命令时:

php app'console原则:schema:create

构建我的数据库,我得到以下错误:

警告:class_parents(): Class'DataProvider'DatabaseBundle'Entity'BaseEntity不存在无法加载到(…)'vendor'doctrine'lib'Doctrine'ORM'Mapping'ClassMetadataFactory.php line 223

问题是:为什么它试图在DataProvider'DatabaseBundle'Entity中寻找类名称空间,当我在映射文件中显式定义它时?映射文件的示例片段:

<mapped-superclass name="(...)'DataAccessLayerBundle'Entity'Base'BaseEntity">

我注意到symfony/doctrine只是基于xml文件名(例如BaseEntity.orm.xml)和当前bundle命名空间查找那些类。

是否有任何方法可以解耦我想要的东西,或者我被困在定义实体和它们的映射在同一个bundle?

从文档中可以看出,实体和映射可以放在不同的bundle中。要做到这一点,你必须在主配置中配置doctrine,如下例所示:

orm:
    auto_generate_proxy_classes: %kernel.debug%
    ...
    entity_managers:
      default:
        mappings:
          (...)DataAccessLayerBundle:
            type: xml
            dir: ../DataProvider/DatabaseBundle/Resources/config/doctrine

我仍然必须将我的BaseEntity类从Entity'Base移动到Entity文件夹才能工作,但与获得的灵活性相比,这是一个小小的牺牲。

配置参考:http://symfony.com/doc/2.0/reference/configuration/doctrine.html

相关文章: