2013-08-25 39 views
8

Tôi muốn nhận danh sách với mọi người nghe đã đăng ký trên đơn đăng ký của tôi cũng như mức độ ưu tiên của họ. Danh sách đó nên chứa các trình lắng nghe của riêng tôi và các trình lắng nghe mà lõi Symfony hoặc các gói được kích hoạt khác cũng đã đăng ký.Lấy danh sách với mọi người nghe trên Symfony2

Điều đó có khả thi không?

Cảm ơn

Trả lời

6

Bạn có thể nhận event dispatcher từ container và có một cái nhìn tại các sự kiện với getListeners chức năng. Ví dụ trong điều khiển

$evd = $this->get('event_dispatcher'); 
$listeners = $evd->getListeners(); 

Mô tả

/** 
* Gets the listeners of a specific event or all listeners. 
* 
* @param string $eventName The name of the event 
* 
* @return array The event listeners for the specified event, or all event listeners by event name 
*/ 
public function getListeners($eventName = null); 

Hãy cẩn thận, học thuyết có điều phối sự kiện riêng.

/** @var $em EntityManager */ 
$em = $this->getDoctrine()->getManager(); 
$evd = $em->getEventManager(); 
$listeners = $evd->getListeners(); 
+2

tôi thấy nó khá khó khăn để có được những thông tin tôi muốn từ mảng đó ' getListeners' được trả lại (sf 2.3). Tôi đã kết thúc bằng văn bản sau để phân tích cú pháp: '$ $ dispatcher = $ this-> get ('event_dispatcher'); foreach ($ dispatcher-> getListeners() là $ listeners) {foreach ($ listeners là $ listener); {foreach (người nghe dưới dạng chi tiết) {if (gettype ($ details) == 'string') {echo "($ details)"; echo '
'; } else {echo get_class (chi tiết $); }}}} '' – Sam

5

Nếu bạn không muốn phải viết code để hiển thị nó trên trang web của bạn, bạn chỉ có thể sử dụng CLI:

php app/console debug:event-dispatcher