事件监听器未在Doctrine事件中注册或调用

时间:2012-11-02 12:37:28

标签: symfony doctrine-orm symfony-2.1

我已按照cookboock中的说明操作:http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html 但不幸的是我的EventListener没有被调用。

service.yml

services:
      strego.acl.eventlistener:
        class: Strego\TippBundle\EventListener\AclUpdater
        tags:
            - { name: doctrine.event_listener, event: prePersist, connection: default }

这是我要执行的Eventlistener:

namespace Strego\TippBundle\EventListener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

class AclUpdater implements ContainerAwareInterface
{

    protected $container;


    public function prePersist(LifecycleEventArgs $args) {
        $args->idonotexist(); // should crash if called
        }
    }

    public function setContainer(ContainerInterface $container = null) {
        $this->container = $container;
    }
}

现在是我的控制器代码,我想用它来测试它:

public function testAction($id){
        $em = $this->getDoctrine()->getEntityManager();
        $entity = $em->getRepository('StregoTippBundle:BetGroup')->find($id);
        $entity->setUpdatedAt(new \DateTime());
        $entity->setTitle('update Name! #2');
        $em->persist($entity);
        $em->flush();         
        return new \Symfony\Component\HttpFoundation\Response("done");
    }

我没有为什么我的prePersist Action没被调用。有没有人看到我的代码存在问题?

1 个答案:

答案 0 :(得分:5)

第一次保存实体时会调用

prePersist。在控制器中,您正在更新现有的。

放置preUpdate并尝试将控件从编辑更改为创建新实体。您可能不需要连接:config.yml中的默认值。