在Symfony2/Doctrine中插入记录后触发事件的最佳方式是什么?Symfony2 - doctrine/orm上的听众
4
A
回答
10
首先,注册一个服务作为一种学说事件侦听器:
app/config.yml
:
services:
foo.listener:
class: Vendor\FooBundle\BarClass
tags:
- { name: doctrine.event_listener, event: postPersist, method: onPostPersist }
然后在您的监听器类,定义一个onPostPersist
方法(或任何你命名的配置的方法)需要Doctrine\ORM\Event\LifecycleEventArgs
参数:
public function onPostPersist(LifecycleEventArgs $eventArgs)
{
// do stuff with the entity here
}
请注意,你不能EntityManager实例传递给listene r类,因为$ eventArgs包含对它的引用,这样做会抛出CircularReferenceException。
1
尝试注入容器本身而不是安全上下文。使用FOS_USER,security.context依赖于您的侦听器(EM),您的侦听器需要security.context。
<service id="foo.listener" class="%foo.listener.class%">
<argument type="service" id="service_container"/>
<tag name="doctrine.event_listener" event="postPersist" method="fooMethod" />
</service>
顺便说一句,至少在XML,方法名似乎并不奏效,默认情况下它调用的方法“postPersist”代替,而忽略你给任何方法的名称(fooMethod);请让我知道,如果这是YAML配置的情况,或者我错了。
相关问题
- 1. 的Symfony2/Doctrine2:管理听众
- 2. rallytextfield上的听众
- 3. jQuery的AJAX听众
- 4. Onclick Android的听众
- 5. 静态听众
- 6. 多SeekBars听众
- 7. 处理听众
- 8. Java onclick听众
- 9. 不同邮箱上的听众
- 10. Symfony2当听众比服务更可取时?
- 11. 访问从听众
- 12. Jetty9多个听众
- 13. Guice - 注入听众
- 14. android sim卡听众
- 15. Alertdialog多个听众
- 16. 听众c#像java
- 17. java MVC,多听众
- 18. Gspread - 更改听众?
- 19. JavaScript操作听众
- 20. Android Shift键听众
- 21. 的TableRow的onclick听众
- 22. 的Java Swing/JFrame的听众
- 23. 的Node.js - 听时听众注册
- 24. 在Hazelcast对象上获取听众
- 25. 修改核心听众
- 26. 关于Java的听众
- 27. At.js的两位听众
- 28. 触发听众的祝酒
- 29. TestNG的听众:拦截@dataProvider
- 30. http请求php的听众
我正在做这个完全相同的事情,但我试图在我的侦听器中包含对securityContext对象的引用。我在我的yml文件中添加了:arguments:[“@ security.context”],但是当我将$ securityContext对象添加到我的构造函数中时,出现循环引用错误。有任何想法吗?我正在使用FOSUserBundle,并在我收到的错误中显示。 – Jeremy 2011-09-26 19:35:09
这是我收到的错误。 ServiceCircularReferenceException:检测到服务“security.context”的循环引用,路径:“profiler_listener - > profiler - > security.context - > security.authentication.manager - > fos_user.user_manager - > doctrine.orm.default_entity_manager - > doctrine.dbal。 default_connection - > my.listener“。 – Jeremy 2011-09-26 19:35:55