2014-06-23 1 views
0

저는 ZendFramework2와 함께 Doctrine2를 사용하고 있습니다. http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html 과 같이 일부 엔티티의 수명주기 이벤트를 처리해야하지만 리스너 또는 적어도 Zend ServiceManager 인스턴스를 가져 오기 위해서는 몇 가지 추가 매개 변수가 필요합니다. Doctrine 리스너에 Zend ServiceManager를 갖거나 매개 변수를 전달할 수있는 방법이 있습니까?Doctrine Entity Listener에 매개 변수를 전달하는 방법은 무엇입니까?

<?php 
class ProductListener implements EventSubscriber 
{ 
    public function getSubscribedEvents() 
    { 
     return array(
      'postUpdate', 
     ); 
    } 

    public function postUpdate(LifecycleEventArgs $args) 
    { 
     $entity = $args->getObject(); 
     $entityManager = $args->getObjectManager(); 

     // need to pass additional parameters here like 
     $config = $this->getServiceLocator()->get('config'); 
    } 
} 

답변

0

ZF2의 ServiceLocatorAwareInterface을 살펴보십시오. 이렇게하려면 리스너가 링크 예제에 표시된대로 직접 newing하는 대신 Service Manager/Locator 자체 (및 모듈/응용 프로그램 구성의 관련 invokable/factory 선언)를 통해 인스턴스화되어야합니다. 여기

마법을 이해하는 데 도움이 될 another question입니다)

+0

감사합니다,하지만 캐치는 리스너가 교리보다는 ZF에 의해 호출된다, 그래서이 마법이 작동하지 않습니다. –

+0

당신은 틀린 Alexey입니다, 실제로 작동합니다. 리스너는 FQCN 또는 서비스 탐지기로 검색 할 수 있습니다 35 번 줄을 읽으십시오 : https://github.com/doctrine/DoctrineModule/blob/master/src/DoctrineModule/Options/EventManager.php#L35 – JBENOIT

관련 문제