Doctrine / Symfony:如何在EntityListener中包含EntityManager

时间:2017-03-10 09:16:44

标签: php symfony doctrine-orm doctrine

我有一个实体BaseInformation

/**
 * @ORM\Entity
 * @ORM\EntityListeners({"AppBundle\EntityListener\BaseInformationListener"})
 * @ORM\Table(name="BaseInformation")
 */
class BaseInformation
{ ...

因此我有EntityListener

/**
 * Class BaseInformationListener
 * @package AppBundle\EventListener
 */
class BaseInformationListener
{
    /**
     * @ORM\PreUpdate
     *
     * @param BaseInformation $baseInformation
     * @param PreUpdateEventArgs $event
     */
    public function preUpdateHandler(BaseInformation $baseInformation, PreUpdateEventArgs $event)
    {
        dump($baseInformation);
        dump($event->getEntityChangeSet());
    }
}

我需要将ChangeSet保存到数据库中。但我无法访问EntityManager。我可以从中提供服务,但是监听器会自动调用实体中的注释。那么,如何才能访问EnttiyManager以保存我的ChangeSet

1 个答案:

答案 0 :(得分:1)

您可以将侦听器定义为服务并将其标记为EntityListener,以便您可以使用通常需要的依赖项:

services:
    base_information_listener:
        class: AppBundle\EntityListener\BaseInformationListener
        arguments: ['@doctrine.orm.entity_manager']
        tags:
            - { name: doctrine.orm.entity_listener }

在学说2.5之前,您还需要在相关实体中使用注释(as described in the doc)。

希望这个帮助