Symfony2 - PostFlush 事件

标签 symfony

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

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

所以现在的问题是,在我的 Controller 中,使用 foreach 添加了一个警报

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 输出两次,这让我相信正确数量的警报被添加到数组中。

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

如何在这里处理多个警报?

谢谢

最佳答案

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

关于Symfony2 - PostFlush 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29104738/

相关文章:

php - Symfony3 无法使用服务中的路由器创建已翻译的路由

symfony - 为什么我似乎无法将变量从 Controller 传递到 symfony 4 中的表单?

apache - .htaccess - 从域密码保护中排除子域

php - Symfony 应用程序的运行时配置

php - APCu 和 Symfony2

php - 电影数据库的sql symfony实体关系orm

php - Doctrine 缓存 - 升级到 PHP 5/6

symfony - Composer 太老了

Symfony2 : form exception - The options "class", "query_builder"不存在。已知选项有:

php - 在 Symfony 的 FOSUserBundle 中检测重复登录