有没有办法在配置文件之外修改doctrine的实体映射配置?

acm*_*cme 9 mapping entity bundle symfony doctrine-orm

在我的标准Symfony2-app中,我有一堆捆绑包含一些实体.其中一些实体不在标准文件夹中,即教条的自动化发现(例如 /src/Acme/DemoBundle/Entities)但位于不同的位置.

我可以很容易地config.yml用来告诉学说使用这样的不同位置:

doctrine:
    orm:
        auto_mapping: false
        mappings:
           AcmeDemoBundle:
              type: annotation
              prefix: Acme\DemoBundle\Entities\
              dir: %kernel.cache_dir%\Acme\DemoBundle\Entities
Run Code Online (Sandbox Code Playgroud)

这有效.但是说我有10个捆绑带有不同的映射,它config.yml会变得非常快.有没有其他方法,例如使用CompilerPass或通过DependencyInjection,所以我不需要添加我的所有实体config.yml?我已经看过了DoctrineBundle,但到目前为止没有运气.

acm*_*cme 2

回答我自己:

最简单的方法就是调整自动加载,不需要修改设置。在 Symfony 的标准发行版中 autoload.php 中,您必须向 registerNamespace 方法添加另一个位置:

$loader->registerNamespaces(array(
    [...]
    'Foo' => array(__DIR__.'/../src/dirA', __DIR__.'/../src/dirB')
));
Run Code Online (Sandbox Code Playgroud)

然后,Doctrine 将首先在 dirA 中查找“Foo”命名空间中的实体,如果未找到,则在 dirB 中查找。