2013-06-03 8 views
11

私のアプリには事前更新リスナーがあります。私はそれがいくつかの追加レコードを作成したいと思っています。基本的な機能の簡単な例を以下に示します。今回の実装では、新しいイベントが永続化されていないように見えます。私がここで作る必要がある他の呼び出しがありますか?ありがとう。symfony 2.1のpreUpdateコールへの追加の永続呼び出しの追加

public function preUpdate(Event\LifecycleEventArgs $eventArgs) 
{ 
    $em = $eventArgs->getEntityManager(); 
    $uow = $em->getUnitOfWork(); 
    $entity = $eventArgs->getEntity(); 

    $updateArray = $eventArgs->getEntityChangeSet(); 

    //Updates 
    if (($entity instanceof Bam) === false) { 
     $thing = new OtherThing(); 
     $thing->setFoo('bar'); 

     $uow->persist($thing); 
    } 

    $uow->computeChangeSets(); 
} 
+0

'$ historyRecord'は何ですか? – cheesemacfly

+0

タイプミスが修正されました。 – keybored

答えて

26

キーがフラッシュした後、それらを永続化するためにある:

<?php 

namespace Comakai\CQZBundle\Handler; 

use Symfony\Component\DependencyInjection\ContainerInterface; 
use Doctrine\Common\EventSubscriber; 
use Doctrine\ORM\Event; 

/** 
* 
*/ 
class YourHandler implements EventSubscriber 
{ 
    protected $things = []; 

    public function getSubscribedEvents() 
    { 
     /** 
     * @todo Check if this is running in the console or what... 
     */ 
     if (isset($_SERVER['HTTP_HOST'])) { 

      return [ 
       'preUpdate', 
       'postFlush' 
      ]; 
     } 

     return []; 
    } 

    public function preUpdate(Event\LifecycleEventArgs $eventArgs) 
    { 
     $em = $eventArgs->getEntityManager(); 
     $uow = $em->getUnitOfWork(); 
     $entity = $eventArgs->getEntity(); 

     $updateArray = $eventArgs->getEntityChangeSet(); 

     //Updates 
     if (($entity instanceof Bam) === false) { 

      $thing = new OtherThing(); 
      $thing->setFoo('bar'); 

      $this->things[] = $thing; 
     } 
    } 

    public function postFlush(Event\PostFlushEventArgs $event) 
    { 
     if(!empty($this->things)) { 

      $em = $event->getEntityManager(); 

      foreach ($this->things as $thing) { 

       $em->persist($thing); 
      } 

      $this->things = []; 
      $em->flush(); 
     } 
    } 
} 
+1

私はこれを試していますが、私は "PHP致命的なエラーがあります:最大機能ネストレベル '1000'に達しました" –

+2

バグを検出: "$ this-> things = [];" "$ em-> flush();"の前に –

+0

申し訳ありません、私にも起こった!、私の答えを更新する、ありがとうございました。 – coma

関連する問題