我想解耦我的应用程序,这样我就可以在任何地方使用我的实体,无论它们的数据源是什么。
所以我把我的实体放在
DataAccessLayerBundle\Entity
和
中的映射DataProvider\DataBaseBundle\Resources\config\doctrine
问题:
当我尝试以下命令时:
php app\console doctrine:schema:create
构建我的数据库时,出现以下错误:
Warning: class_parents(): Class (..)\DataProvider\DatabaseBundle\Entity\BaseEntity does not exist and could not be loaded in (...)\vendor\doctrine\lib\D octrine\ORM\Mapping\ClassMetadataFactory.php line 223
问题是:到底为什么要在 DataProvider\DatabaseBundle\Entity 中寻找类 命名空间,当我在映射文件中明确定义它时?映射文件的示例片段:
<mapped-superclass name="(...)\DataAccessLayerBundle\Entity\Base\BaseEntity">
我注意到 symfony/doctrine 只是根据 xml 文件名(例如 BaseEntity.orm.xml)和当前的包命名空间查找那些类。
有什么方法可以解耦我想要的东西,还是我坚持在同一个包中定义实体和它们的映射?
最佳答案
从文档中可以看出,可以将实体和映射放在单独的包中。为此,您必须在主配置中配置学说,如下例所示:
orm: auto_generate_proxy_classes: %kernel.debug% ... entity_managers: default: mappings: (...)DataAccessLayerBundle: type: xml dir: ../DataProvider/DatabaseBundle/Resources/config/doctrine
我仍然必须将我的 BaseEntity 类从 Entity\Base 移动到 Entity 文件夹才能工作,但与获得的灵 active 相比,这是一个小小的牺牲。
配置引用:http://symfony.com/doc/2.0/reference/configuration/doctrine.html
关于php - Doctrine2+Symfony2 : How can I store entities and mappings in separate bundles?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8166694/