如何将请求范围的请求和服务传递到Symfony中的doctrine.event_listener服务?

时间:2014-09-17 00:34:11

标签: symfony doctrine-orm

我无法让它发挥作用。我需要在Doctrine监听器服务中提供请求范围的服务,该服务标记为doctrine.event_listener。

我尝试了这种https://github.com/symfony/symfony/issues/5486方法,但仍然没有运气。

我需要做的是这个服务定义:

<service id="acme.listener.on_insert" class="Acme\MyBundle\Listener\OnInsertListener">
    <argument type="service" id="my_request_scope_service"/>
    <tag name="doctrine.event_listener" event="onFlush" method="onFlush"/>
</service>

感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用Symfony CookBook中How to Work With Scopes中所述的同步服务。

首先,您必须将my_request_scope_service设为synchronized

然后在你的acme.listener.on_insert中你必须修改注入setter所需服务的方式:

<service id="acme.listener.on_insert" class="Acme\MyBundle\Listener\OnInsertListener">
   <call mehtod"setYourRequestScopeService">
       <argument type="service" id="my_request_scope_service" on-invalid="null" strict="false" />
   </call>
   <tag name="doctrine.event_listener" event="onFlush" method="onFlush"/>
</service>

请注意,正如文档中所示,您必须在侦听器服务中处理可能的null值,并且自版本2.3以来可以使用同步服务。