2012-11-02 1 views
3

요리 보트의 지침을 따랐습니다 : http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html 하지만 불행히도 내 EventListener가 호출되지 않습니다.Doctrine 이벤트에 이벤트 리스너가 등록 또는 호출되지 않았습니다.

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"); 
    } 

: 나는 그것을 테스트 할 수있는

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; 
    } 
} 

지금 내 컨트롤러 코드를 여기 service.yml

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

그리고

는 실행 제의 EventListener입니다 내 prePersist Action이 호출되지 않는 이유가 Idae가 없습니다. 누구든지 내 코드에 문제가있는 것을 볼 수 있습니까?

답변

4

prePersist은 엔티티를 처음 저장할 때 호출됩니다. 컨트롤러에서 기존 버전을 업데이트하고 있습니다.

preUpdate을 넣고 컨트롤러에서 편집에서 새로운 엔티티 생성으로 변경하십시오. 아마 config.yml에 연결이 필요 없을 것입니다.

+0

도움을 주셔서 감사합니다. DoctrineFixture로드 중 이벤트가 어떻게 트리거 될 수 있습니까? 청취자가 등록되어 있어도 청취자는 트리거되지 않습니다. – m0c

+0

나는 분명히하기 위해 이해하고 있는지 잘 모르겠다. 당신은 DoctrineFixtures가 prePersist() 리스너를 트리거하지 않는다고 말하고 있습니까? 솔직히 왜 그런 일이 일어날 지 모르지만 오랫동안 사용하지는 않습니다. 나는 이유를 잊어 버렸습니다. 그러나 어쩌면 이것이 그 중 하나 일 수도 있습니다. 제안 : 제대로 작동하지 않으면 사용하지 마십시오. 모든 테스트 클래스는 내 자신의 TestCase를 확장하여 Phpunit을 확장합니다. 그 중산층에서는 정규 $ em-> persist ($ 엔티티)를 사용하여 조명기를 배치하고 모든 리스너가 트리거됩니다. – Zeljko

+0

Doctrine fixtures 내에서 청취자가 트리거되지 않습니다. 따라서 테스트 클래스를 사용하여 조명기를로드하고 있습니까? Doctrinefixtures를 여전히 사용하는 것을 선호합니다. 왜냐하면 저는 현재 모든 조명기를 참조로 구축했기 때문입니다. – m0c

관련 문제