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

时间:2011-11-17 11:56:19

标签: php symfony doctrine-orm

我想解耦我的应用程序,以便我可以在任何地方使用我的实体,无论数据源是什么。

所以我把我的实体放在

  

DataAccessLayerBundle \实体

中的映射
  

的DataProvider \ DataBaseBundle \资源\配置\学说

问题:

当我尝试以下命令时:

  

php app \ console doctrine:schema:create

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

  

警告:class_parents():Class   (..)\ DataProvider \ DatabaseBundle \ Entity \ BaseEntity不存在   并且无法加载到(...)\ vendor \ doctrine \ lib \ D.   octrine \ ORM \ Mapping \ ClassMetadataFactory.php第223行

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

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

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

有什么方法可以解决我想要的东西,或者我是否坚持在同一个捆绑中定义实体及其映射?

1 个答案:

答案 0 :(得分:4)

从文档中可以看出,可以在单独的包中包含实体和映射。为此,您必须在主配置中配置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