PreUpdate事件侦听器使站点崩溃

时间:2013-08-01 18:16:31

标签: symfony doctrine-orm event-listener http-status-code-503

我正在尝试构建一个preUpdate,我正在使用postUpdate这样做,但是我并没有考虑到每当编辑该实体时我都在改变这一事实,无论是哪个领域。 ..所以我读到我应该使用preUpdate而不是......

这是我的preUpdate Listener:

namespace Prizes\PrizesBundle\EventListener;

use Doctrine\ORM\Event\LifecycleEventArgs;
use Prizes\PrizesBundle\Entity\Prize;
use Prizes\CatalogBundle\Entity\CatalogHasPrize as CHP;

/**
 * Description of DeactivatePrizesInCatalog
 *
 * @author Victoria Noguera
 * Desactiva premios en catalogos cuando se desactiven en el prize central.
 */
/**
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 */
class DeactivatePrizesInCatalog {
/**
     * @ORM\PrePersist()
     * @ORM\PreUpdate()
     */
    public function preUpdate(LifecycleEventArgs $args) {
       $entity = $args->getEntity();
        $entityManager = $args->getEntity

Manager();
    if ($entity instanceof Prize) {
        if ($args->hasChangedField('status')) {
            $status_new = $args->getNewValue('status');
            if ($status_new->getName() == "Inactive") {
                $statusinactive = $entityManager->getRepository('AppStatusBundle:Status')->find(8);
                $q = $entityManager->createQuery("UPDATE CatalogBundle:CatalogHasPrize c SET c.status = :statusid WHERE c.status = 7 AND c.prize = :prizeid")
                        ->setParameters(array('statusid' => $statusinactive, 'prizeid' => $entity->getId()));
                $rs = $q->getResult();
            } else if ($status_new->getName() == "Active") {
                $statusinactive = $entityManager->getRepository('AppStatusBundle:Status')->find(7);
                $q = $entityManager->createQuery("UPDATE CatalogBundle:CatalogHasPrize c SET c.status = :statusid WHERE c.status = 8 AND c.prize = :prizeid")
                        ->setParameters(array('statusid' => $statusinactive, 'prizeid' => $entity->getId()));
                $rs = $q->getResult();
            }
        }
    }
}

}

这就是我在config.yml文件中执行此操作的方式(我只是将其读入service.yml,但我稍后会对其进行更改)

services:
    preupdate.listener:
        class: Prizes\PrizesBundle\EventListener\DeactivatePrizesInCatalog
        tags: 
             - { name: doctrine.event_listener , event: preUpdate }

然而,当我这样做时,我的项目从完全功能到503服务不可用。即使我只是写public function preUpdate(LifecycleEventArgs $args) { }它崩溃了,我也会假设配置问题,但我不知道我做错了什么。

我很感激提供的任何帮助。谢谢

1 个答案:

答案 0 :(得分:0)

您正在向您的侦听器添加映射信息,而该侦听器本身不是实体:

/**
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 */

和......

/**
 * @ORM\PrePersist()
 * @ORM\PreUpdate()
 */

...一定不能在你的听众课上。

如果实体本身包含prePersist方法,则可以在实体中使用这些注释。

相关问题