我不知道该怎么做,
我在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作为参数传递我不知道
答案 0 :(得分:3)
然后你注入了错误的对象。为什么不向该服务注入学说?
services:
logdb:
class: %logdb.class%
arguments: ['@doctrine','@request_injector']
# ^^^^^^^^^^^^^- not the entity_manager
然后你可以在service
:
$em = $this->doctrine->getManager($this->request);