保存新实体后的Symfony事件监听器

mce*_*cek 1 symfony

我需要检查实体是否为特定实体的实例,并在保存新实体后做一些事情。类似于cakephp中的afterSave方法。我试过postFlushonFlushpostPersistpostLoad

AppBundle / EventListener / DoSomethingAfterSaveNewEntity.php

namespace AppBundle\EventListener;

use Doctrine\ORM\Event\OnFlushEventArgs;
use AppBundle\Entity\SomeEntity;

class DoSomethingAfterSaveNewEntity 
{
    public function onFlush(OnFlushEventArgs $args)
    {   
        $entity = $args->getEntity();
        $em = $args->getEntityManager();
        $uow = $em->getUnitOfWork();

        if (!$entity instanceof SomeEntity) {
          die('not instance!!!');
        }

        die('post flush!!!');
        $entityManager = $args->getEntityManager();
    }
}
Run Code Online (Sandbox Code Playgroud)

Tho*_*sen 6

您的想法是正确的,但是您应该为此创建一个新的EntityListener或EntitySubscriber。因此,实体本身不会听取其更改(不良做法)。

services.yml

your.entity.subscriber:
      class: AppBundle\Subscriber\YourEntitySubscriber
      tags:
          - { name: doctrine.event_subscriber, connection: default }
Run Code Online (Sandbox Code Playgroud)

YourEntitySubscriber.php

<?php

namespace AppBundle\Subscriber;

use AppBundle\Entity\YourEntity;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;

class YourEntitySubscriber implements EventSubscriber
{
    /**
     * @return array
     */
    public function getSubscribedEvents()
    {
        return array(
            'postPersist',
            'postUpdate',
        );
    }

    /**
     * @param LifecycleEventArgs $args
     */
    public function postPersist(LifecycleEventArgs $args)
    {
        // Do whatever you want (after entity creation)
    }

    /**
     * @param LifecycleEventArgs $args
     */
    public function postUpdate(LifecycleEventArgs $args)
    {
        // Do whatever you want
    }
}
Run Code Online (Sandbox Code Playgroud)

您也可以在此处获得更多示例:event_listeners_subscribers