我已按照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没被调用。有没有人看到我的代码存在问题?
答案 0 :(得分:5)
prePersist
。在控制器中,您正在更新现有的。
放置preUpdate
并尝试将控件从编辑更改为创建新实体。您可能不需要连接:config.yml中的默认值。