Php 如何在Symfony2中注入特定的条令实体管理器?

Php 如何在Symfony2中注入特定的条令实体管理器?,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,在几个使用同一数据库的项目中,我们制作了一个Symfony2包来映射所有常用函数 现在的问题是,我们有第二个数据库,我们需要与第一个数据库相同的服务 config.yml @AcmeMainBundle>services.yml Acme\MainBundle\MainManager 这个集合工作正常,我得到了所有预期的结果,因为default\u entity\u manager被设置为main,这是正确的EntityManager 但现在问题来了 @acmesubundle>services

在几个使用同一数据库的项目中,我们制作了一个Symfony2包来映射所有常用函数

现在的问题是,我们有第二个数据库,我们需要与第一个数据库相同的服务

config.yml

@AcmeMainBundle>services.yml

Acme\MainBundle\MainManager

这个集合工作正常,我得到了所有预期的结果,因为
default\u entity\u manager
被设置为
main
,这是正确的EntityManager

但现在问题来了

@acmesubundle>services.yml

Acme\SubBundle\SubManager

未知的实体命名空间别名acmesubundle

因为默认情况下,
EntityManager
进入
main

我的问题是,是否有一种“干净”的方法可以在services.yml中插入特定的实体管理器作为参数

2013年2月18日答复

下面是从
services.yml

条令生成一个相对于其名称的新服务名称

例如:

@doctrine.orm.default_entity_manager
在这种情况下,它会生成另外两个实体管理器

@doctrine.orm.main_entity_manager
@doctrine.orm.sub_entity_manager
传递的参数是
条令\ORM\EntityManager
对象

就我而言:

services.yml


2013年8月22日更新

另一种方法是直接向存储库而不是经理提供

要做到这一点,您必须创建一个包含存储库的服务

services.yml

我们让条令生成给定的存储库。
然后我们可以将其注入另一个服务中

services:
    mainmanager:
        class: Acme\MainBundle\MainManager
        arguments:
            - @acme.foo_repository
submanager:
  class: Acme\SubBundle\SubManager
  arguments: [ @doctrine.orm.entity_manager ]
class SubManager
{
    public function __construct(EntityManager $em)
    {
        $em->getRepository('AcmeSubBundle:Bar'); // Throws exception
    }
}
@doctrine.orm.default_entity_manager
@doctrine.orm.main_entity_manager
@doctrine.orm.sub_entity_manager
submanager:
    arguments: [ @doctrine.orm.sub_entity_manager ]
services:
    acme.foo_repository:
        class: Doctrine\Common\Persistence\ObjectRepository
        factory_service: doctrine.orm.main_entity_manager
        factory_method:  getRepository
        arguments:
            - "AcmeMainBundle:Foo"
services:
    mainmanager:
        class: Acme\MainBundle\MainManager
        arguments:
            - @acme.foo_repository