3
我已按照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");
}
我沒有Idae爲什麼我的prePersist行動沒有被調用。有沒有人看到我的代碼的問題?
感謝您的幫助,在DoctrineFixture加載過程中事件是如何觸發的?即使監聽器已註冊,監聽器也不會被觸發。 – m0c
我不確定我是否理解,只是爲了澄清;你說DoctrineFixtures不會觸發prePersist()偵聽器?老實說,我不知道爲什麼會發生這種情況,但我很久沒有使用它了。我忘記了原因,但也許這是其中之一。建議:如果它不正確,請不要使用它。我所有的測試類都擴展了我自己的TestCase,然後擴展了Phpunit。在那個中產階級中,我使用了常規的$ em-> persist($ entity)的fixture,並且觸發了所有的監聽器。 – Zeljko
準確地說,在Doctrinefixtures中,我的偵聽器沒有被觸發。所以你使用測試類來加載燈具?我寧願仍然使用Doctrinefixtures,因爲我目前擁有像引用那樣構建的所有燈具。 – m0c