我尝试在Symfony 2.5中使用Doctrine,并使用XML配置进行实体映射。
我有一个名称空间类Bar
:ACME\TestBundle\Entity\Foo\Bar
由于我有许多实体,它们都不能驻留在ACME\TestBundle\Entity
命名空间中,但必须放在子命名空间中。
创建实体没问题,但我无法弄清楚ORM XML配置文件的放置位置。
我尝试了Resources/config/doctrine/Foo/Bar.orm.xml
,但找不到映射文件:
$ php app/console doctrine:schema:create --dump-sql
No Metadata Classes to process.
我尝试了Resources/config/doctrine/Bar.orm.xml
,忽略了额外的Foo
名称空间Entity
,尽管在Bar.orm.xml
元素name
中正确指定了完整名称空间。
$ php app/console doctrine:schema:create --dump-sql
[Doctrine\Common\Persistence\Mapping\MappingException]
Class 'ACME\TestBundle\Entity\Bar' does not exist
我错过了什么? XML映射文件为这些命名空间类驻留的正确位置是什么?
提前感谢您的帮助。
答案 0 :(得分:1)
使用@ user3749178 Foo.Bar.orm.xml的建议是有效的,并且是解决问题的最简单方法,尽管所有映射文件最终都在一个目录中。
根据以下内容,还可以为所有内容创建单独的目录:
http://symfony.com/doc/current/reference/configuration/doctrine.html#mapping-configuration
以下是配置示例:
doctrine:
orm:
default_entity_manager: default
auto_generate_proxy_classes: %kernel.debug%
entity_managers:
default:
connection: default
mappings:
foo1:
prefix: Cerad\Bundle\ProjectGameBundle\Doctrine\Entity\Foo1
type: yml
dir: src/ProjectGameBundle/Doctrine/EntityMapping/Foo1
is_bundle: false
foo2:
prefix: Cerad\Bundle\ProjectGameBundle\Doctrine\Entity\Foo2
type: yml
dir: src/ProjectGameBundle/Doctrine/EntityMapping/Foo2
is_bundle: false
您基本上为每个包含实体的目录指定一个映射。