【问题标题】:Acces custom Doctrine Manager in a Symfony2 Service在 Symfony2 服务中访问自定义 Doctrine Manager
【发布时间】:2013-08-01 09:26:32
【问题描述】:

我不知道该怎么做,

我在 Symfony2 中创建了一个服务,我需要这个服务使用请求和学说 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 参数选择。 问题是,我如何从服务访问自定义实体管理器?

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

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

【问题讨论】:

    标签: symfony service request entitymanager


    【解决方案1】:

    那么你注入了错误的对象。为什么不向军种注入条令?

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

    然后您可以在您的service 中调用它:

    $em = $this->doctrine->getManager($this->request);
    

    【讨论】:

    • 谢谢,它起作用了,至于教义的类,我的意思是在类 __construct(¿class?$doctrine, Request $request)
    • Doctrine\Bundle\DoctrineBundle\Registry的一个实例别忘了加上use声明
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多