이 튜토리얼의 지침 (http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html)을 수행하고 엔터티의 삽입 또는 업데이트시 Doctrine에서 전달한 이벤트를 수신하는 간단한 수신기를 만들었습니다. preInsert 및 postInsert 이벤트는 올바르게 작동하고 새 엔터티를 만들 때 전달됩니다. 그러나 preUpdate와 postUpdate는 엔티티의 업데이트에 관계없이 호출됩니다. onFlush도 마찬가지입니다. 부수적으로, 기본 CRUD 작업을 지원하는 콘솔 생성 컨트롤러가 있으며, 그대로 두었습니다.doctrine 2에서 preUpdate 및 postUpdate 이벤트가 트리거되지 않음
다음은이 작업을 수행하는 데 필요한 몇 가지 코드 조각입니다.
config.yml
annotation.listener:
class: City\AnnotatorBundle\Listener\AnnotationListener
tags:
- { name: doctrine.event_listener, event: postUpdate}
리스너 구현 (나는 다른 기능을 생략하고 단순 목적으로 만 postUpdate 왼쪽)
class AnnotationListener
{
public function postUpdate(LifecycleEventArgs $args)
{
$entity=$args->getEntity();
echo $entity->getId();
die;
}
}
는 엔티티 ID가 표시되지 않습니다, 그리고 스크립트는 계속 함수가 끝날 때까지 다이에도 불구하고 실행이 완료 될 때까지 실행됩니다.
을 :
이제 수명주기 여기 콜백에 대해
당신은 자세한 내용을보실 수 있습니다 ... 단점은 당신이 당신의 모델과 논리를 혼합 것입니다 그리고 가능하면 피해야한다 뭔가 다른 엔티티와 엔티티 관리자 자체 및 기타 서비스를 사용해야하므로 좋은 생각이 아닙니다. 어쨌든 이제는 문제가 해결 된 것 같습니다. 최신 버전의 Symfony로 업데이트하고, 캐시를 지우고, 모든 것이 작동합니다. – tomor
아, 네가 다른 서비스/엔티티를 사용한다면이 방법을 사용하지 않는 것이 좋다. :) –