2014-01-29 5 views
0

이벤트 디스패처와 인터페이스를 시도하고 있으며 해결책이 떠오르고 있습니다. 어떻게 이벤트 디스패처를 인터페이스합니까?

interface EventDispatcherInterface 
{ 
    public function fire($name, $data); 
} 

지금 내가 심포니의 EventDispatcher를 사용하여 구현하기 위해 노력하고있어 지금까지 나는 다음과 같은 간단한 인터페이스를 가지고있다. 문제는 symfony의 dispatch 메소드가 두 번째 인수가 Event 추상 클래스를 구현할 것으로 기대한다는 것입니다. 좋아, 이제 래퍼 클래스를 생각해 내야 만 해?

use Symfony\Component\EventDispatcher\Event; 

class SymfonyEvent extends Event 
{ 
    private $data; 

    public function __construct($data) 
    { 
     $this->data = $data; 
    } 

    public function getData() 
    { 
     return $this->data; 
    } 
} 

여기

use Symfony\Component\EventDispatcher\EventDispatcher as SymfonyEventDispatcher; 

class SymfonyDispatcher implements EventDispatcherInterface 
{ 
    protected $dispatcher; 

    public function __construct(SymfonyEventDispatcher $dispatcher = null) 
    { 
     $this->dispatcher = $dispatcher ? : new SymfonyEventDispatcher; 
    } 

    public function fire($name, $data) 
    { 
     $event = new SymfonyEvent($data); 

     $this->dispatcher->dispatch($name, $event); 
    } 
} 

어떻게 내가 무신론자 이벤트 리스너를 작성 가야합니까 구현의 첫 번째 패스이다? 정확히 문제에 Matthais Noback의 위대한 블로그에서

+0

당신은 당신이 필요로하는 이유에 대해 좀 더 설명해 주시겠습니까? SymfonyDispatcher가 트릭을 수행하는 것처럼 보입니다. 화재 방법을 원한다면 symfony 디스패처 클래스를 확장 한 다음 설정 파일을 조정하여 자신의 디스패처를 사용할 수 있습니다. 하지만 왜? – Cerad

+0

프레임 워크에 무관 한 패키지를 작성하려고합니다. 도전 과제가되었습니다! – David

+0

Symfony EventDispatcher는 구성 요소이며 Symfony 프레임 워크와 독립적입니다. 패키지에 특정 구성 요소의 사용이 필요하다는 사실이 불가지론적인 요구 사항을 충족 시킨다는 것을 확신시켜보십시오. – Cerad

답변

0
class SymfonyEventDispatcher implements EventDispatcher 
{ 

    private $eventDispatcher; 

    public function __construct(EventDispatcherInterface $eventDispatcher) 
    { 
     $this->eventDispatcher = $eventDispatcher; 
    } 

    public function dispatch(Event $event) 
    { 
     $listeners = $this->eventDispatcher->getListeners($event->getName()); 

     foreach ($listeners as $listener) { 
      call_user_func($listener, $event); 
     } 
    } 
} 

: http://php-and-symfony.matthiasnoback.nl/2014/08/symfony2-decoupling-your-event-system/