开发者

Symfony2 - listeners on doctrine / orm

What is the b开发者_开发知识库est way to have an event that fires after a record is inserted in Symfony2 / Doctrine?


First, register a service as a Doctrine event listener:

app/config.yml:

services:
    foo.listener:
        class: Vendor\FooBundle\BarClass
        tags:
            - { name: doctrine.event_listener, event: postPersist, method: onPostPersist }

Then in your listener class, define an onPostPersist method (or whatever you named the method in the config) that takes a Doctrine\ORM\Event\LifecycleEventArgs argument:

public function onPostPersist(LifecycleEventArgs $eventArgs)
{
    // do stuff with the entity here
}

Note that you can't pass an instance of EntityManager to the listener class, because $eventArgs contains a reference to it, and doing so will throw a CircularReferenceException.

Doctrine Project documentation here. Symfony Project documentation here (out of date, but included for reference)/


Try injecting the container itself instead of the security context. with FOS_USER, security.context depends on your listener (EM) and your listener requires 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>

By the way, at least in XML, the method name does not seem to be working, by default it call the method 'postPersist' instead and ignore whatever method name you give (fooMethod); Please let me know if that's the case with YAML config, too, or I am just wrong.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜