在Symfony2服务中访问自定义Doctrine Manager

时间:2013-08-01 09:26:33

标签: symfony service request entitymanager

我不知道该怎么做,

我在Symfony2中创建一个服务,我需要这个服务使用请求和doctrine entitymanager服务

在services.yml中,我添加以下行:

    logdb:
      class:     %logdb.class%
      arguments: ['@doctrine.orm.entity_manager','@request_injector']

我的服务类:

class LogDB {

protected $em;
protected $request;

public function __construct(EntityManager $em, Request $request){

    $this->em= $em;
    $this->request= $request;
}

public function saveLog(){

}

}

好吧,在saveLog()中我需要访问entitymanager,但是从默认的不同管理器,我的意思是实体管理器,我注入'@ doctrine.orm.entity_manager'是默认的。

在控制器中,我可以这样做:

$em = $this->getDoctrine()->getManager($this->getRequest()->get('shop'));

我为每个商店使用不同的数据库,我选择url param。 问是,如何从服务访问自定义实体管理器?

注射容器是一个糟糕的解决方案......

也许我需要将来自控制器的每个服务方法中的entitymanager作为参数传递我不知道

1 个答案:

答案 0 :(得分:3)

然后你注入了错误的对象。为什么不向该服务注入学说?

services:
    logdb:
       class:     %logdb.class%
       arguments: ['@doctrine','@request_injector']
                   # ^^^^^^^^^^^^^- not the entity_manager

然后你可以在service

中调用它
$em = $this->doctrine->getManager($this->request);