我想解耦我的应用程序,所以我可以使用我的实体在任何地方,无论他们的数据源可能。
我把实体放到
中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