在几个使用相同数据库的项目上工作,我们制作了一个 Symfony2 Bundle 来映射所有常用功能。
现在的问题是我们有第二个数据库,我们需要与第一个数据库相同的服务。
config.yml
doctrine:
dbal:
default_connection: main
connections:
main:
/* ... */
sub:
/* ... */
orm:
default_entity_manager: main
entity_managers:
main:
connection: main
mappings:
AcmeMainBundle: ~
sub:
connection: sub
mappings:
AcmeSubBundle: ~
auto_generate_proxy_classes: %kernel.debug%
@AcmeMainBundle > services.yml
services:
mainmanager:
class: Acme\MainBundle\MainManager
arguments: [ @doctrine.orm.entity_manager ]
Acme\MainBundle\MainManager
class MainManager
{
public function __construct(EntityManager $em)
{
$em->getRepository('AcmeMainBundle:Foo');
}
}
这组工作正常,我得到了所有预期的结果,因为default_entity_manager
设置为main
正确的 EntityManager。
但现在问题来了。
@AcmeSubBundle > services.yml
submanager:
class: Acme\SubBundle\SubManager
arguments: [ @doctrine.orm.entity_manager ]
Acme\SubBundle\SubManager
class SubManager
{
public function __construct(EntityManager $em)
{
$em->getRepository('AcmeSubBundle:Bar'); // Throws exception
}
}
未知实体命名空间别名 AcmeSubBundle
因为默认EntityManager
进入main
。
我的问题是,是否有一种“干净”的方式可以在services.yml中注入特定的实体管理器作为参数?