Symfony2 - PostFlush 事件
Symfony2 - PostFlush Event
我设置了一些东西,你可以通过一个表单向我的数据库添加一个警报。添加此 Alert 后,postFlush 事件获取 Alert 并对其执行任务。这一切都很完美。
我现在已经改变了一些事情。我没有通过表单添加警报,而是显示了他们可以拥有的所有可能的警报。然后他们可以 select 任何他们想要的警报并将它们添加到数据库中。因此,以前一次只能添加一个警报,现在可以添加多个警报。
所以现在的问题是,在我的控制器中,使用 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 事件中获取一组警报,然后将它们用于任何您想要的。
我设置了一些东西,你可以通过一个表单向我的数据库添加一个警报。添加此 Alert 后,postFlush 事件获取 Alert 并对其执行任务。这一切都很完美。
我现在已经改变了一些事情。我没有通过表单添加警报,而是显示了他们可以拥有的所有可能的警报。然后他们可以 select 任何他们想要的警报并将它们添加到数据库中。因此,以前一次只能添加一个警报,现在可以添加多个警报。
所以现在的问题是,在我的控制器中,使用 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 事件中获取一组警报,然后将它们用于任何您想要的。