我想解耦我的应用程序,以便我可以在任何地方使用我的实体,无论数据源是什么。
所以我把我的实体放在
中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命名空间来查找这些类。
有什么方法可以解决我想要的东西,或者我是否坚持在同一个捆绑中定义实体及其映射?
答案 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