2017-04-06 12 views
1

エンティティが特定のエンティティのインスタンスであるかどうかをチェックし、新しいエンティティを保存した後で何かをする必要があります。 cakephpのメソッドafterSaveのようなもの。私はpostFlushonFlushpostPersistおよびpostLoadを試しました。新しいエンティティを保存した後のsymfonyイベントリスナー

AppBundle /イベントリスナー/ 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(); 
    } 
} 

答えて

3

あなたの考えは正しいですが、そのための新しいEntityListenerやEntitySubscriberを作成する必要があります。エンティティ自体がその変更を聴いているわけではありません(悪い習慣)。

services.yml

your.entity.subscriber: 
     class: AppBundle\Subscriber\YourEntitySubscriber 
     tags: 
      - { name: doctrine.event_subscriber, connection: default } 

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 
    } 
} 

また、あなたが得ることができるより多くの例:event_listeners_subscribers

+1

それは仕事のおかげでたくさんです! – mcek

関連する問題