Symfony2 - PostFlush事件

时间:2015-03-17 16:37:30

标签: symfony

我设置了一些内容,通过表单可以向我的数据库添加警报。添加此警报后,postFlush事件将获取警报并对其执行任务。这一切都很完美。

我现在改变了一些事情。我没有通过表单添加警报,而是显示他们可以拥有的所有可能的警报。然后,他们可以选择他们想要的任何警报,将这些添加到数据库中。因此,在一次只添加一个警报之前,现在可以添加多个警报。

现在的问题是,在我的Controller中,使用foreach

添加了一个Alert
foreach ($data as $flightNum=>$seat) {
    $alert = new Alert();
    $alert->setLastUpdated();
    $alert->setIsDeleted(0);
    $alert->setAlertStatus('Active');

    $flightNumber = new FlightNumbers();
    $flightNumber->setAvailabilityAlert($alert);
    $flightNumber->setFlightNumber($flightNum);
    $alert->addFlightNumber($flightNumber);
    $em->persist($flightNumber);

    $em->persist($alert);
    $em->flush();
}

这个问题是我的postFlush现在似乎只为添加的第一个警报执行。因此,如果我选择三个警报,则第一个警报会对其执行额外的postFlush操作,但其他两个警报不执行。

我玩过postFlush尝试使用数组代替,但似乎没有工作

class AlertListener
{
    protected $api_service;
    protected  $alertEntity = array();
    protected $em = null;

    public function __construct(UapiService $api_service)
    {
        $this->api_service = $api_service;
    }

    public function postPersist(LifecycleEventArgs $args)
    {
        $entity = $args->getEntity();
        if ($entity instanceof Alert) {
            array_push($this->alertEntity, $entity);
            var_dump("TEST");
        }
    }

    public function postFlush(PostFlushEventArgs $args)
    {
        $this->em = $args->getEntityManager();
        $eventManager = $this->em->getEventManager();
        $eventManager->removeEventListener('postFlush', $this);

        \Doctrine\Common\Util\Debug::dump($this->alertEntity);

        if (!empty($this->alertEntity)) {
            foreach($this->alertEntity as $alert) {
                $this->api_service->addFlightsAction($alert);
            }
        }

    }
}

有趣的是,如果我选择2个警报,var_dump会输出两次,这会让我相信正确数量的警报会被添加到数组中。

但是,Object的Symfony2转储只输出一个Alert,所以显然不是。有趣的是,如果我在postPersist函数中转储数组,我会列出大量的警报。如果我在postFlush函数中转储,则只输出一个Alert。

如何在此处理多个提醒?

由于

1 个答案:

答案 0 :(得分:1)

首先,你不应该在循环中刷新,为了性能,请在外面冲洗,然后从PostFlushEventArgs中获取Postflush事件中的一组警报,然后将它们用于任何你想要的任何内容。