Php 如何在Symfony2中注入特定的条令实体管理器?
在几个使用同一数据库的项目中,我们制作了一个Symfony2包来映射所有常用函数 现在的问题是,我们有第二个数据库,我们需要与第一个数据库相同的服务 config.yml @AcmeMainBundle>services.yml Acme\MainBundle\MainManager 这个集合工作正常,我得到了所有预期的结果,因为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
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