2014-10-16 487 views
0

被解僱當我將數據插入User實體,所以我得到兩條記錄插入Dummy實體是罰款在這裏用戶得到以下解僱事件。我需要知道的是,我如何檢查哪個事件被觸發,以便我可以在setHow()方法中使用它?檢查該事件在事件訂閱

$dummy->setHow(......); 

預期結果在虛擬表:

id createdOn    how 
1 2014-10-16 12:12:00 prePersist 
2 2014-10-16 12:12:01 postPersist 

訂戶:

class UserPost implements EventSubscriber 
{ 
    public function getSubscribedEvents() 
    { 
     return array('prePersist', 'postPersist'); 
    } 

    public function prePersist(LifecycleEventArgs $args) 
    { 
     $this->index($args); 
    } 

    public function postPersist(LifecycleEventArgs $args) 
    { 
     $this->index($args); 
    } 

    public function index(LifecycleEventArgs $args) 
    { 
     $em = $args->getEntityManager(); 
     $entity = $args->getEntity(); 

     if ($entity instanceof User) { 
      $dummy = new Dummy(); 
      $dummy->setCreatedOn(new \DateTime('now')); 
      $dummy->setHow(.............); 
      $em->persist($dummy); 
      $em->flush(); 
     } 
    } 
} 

服務:

Service: 
    entity.subscriber.user_post: 
     class: Site\MainBundle\EventSubscriber\Entity\UserPost 
     tags: 
      - { name: doctrine.event_subscriber } 
+0

爲什麼不乾脆像'$這個 - >指數的方法調用傳遞事件的名稱(的$ args, 'prePersist')'? – qooplmao 2014-10-16 15:06:35

+0

@Qoop - 我覺得可以喝杯咖啡了!請創建一個答案,以便我可以接受它。感謝您的解決方案。 – BentCoder 2014-10-16 15:13:27

+0

過於複雜的問題。我一直這樣做。 – qooplmao 2014-10-16 15:21:09

回答

1

您只需通過方法調用,如事件的名稱..

public function prePersist(LifecycleEventArgs $args) 
{ 
    $this->index($args, 'prePersist'); 
} 

public function postPersist(LifecycleEventArgs $args) 
{ 
    $this->index($args, 'postPersist'); 
} 

public function index(LifecycleEventArgs $args, $event) 
{ 
    ... 

    if ($entity instanceof User) { 
     $dummy = new Dummy(); 
     $dummy->setCreatedOn(new \DateTime('now')); 
     $dummy->setHow($event); 
     ... 
    } 
} 
+0

不錯的一個。謝謝。 – BentCoder 2014-10-16 15:22:26