2013-07-30 21 views
3

有沒有一種方法可以附加Zend Framework 2中事件dispatch.error的事件監聽器,其中該監聽器只會附加到與Module.php相關的EventManager ?ZF2:如何附加dispatch.error模塊特定監聽器

我已經完成了這項工作,將偵聽器dispatch附加到全局SharedManager並將當前Module.php的名稱空間作爲第一個參數傳遞。它運作得非常好,但不起作用,當我嘗試dispatch.error時也是如此。

下面是Module.php一個例子:

public function init(ModuleManager $moduleManager) 
{ 
    $sharedManager = $moduleManager->getEventManager()->getSharedManager(); 
    $sharedManager->attach(__NAMESPACE__, 'dispatch', function($e) { 
     exit('IT WORKS'); 
    }); 
    $sharedManager->attach(__NAMESPACE__, 'dispatch.error', function($e) { 
     exit('IT DOES NOT WORK'); 
    }); 
} 

回答

2

的原因,它正在爲派遣但不dispatch.error是dispatch事件被從內部控制器觸發(見Zend公司\的mvc \控制器\ AbstractController :: dispatch)

由於您使用自己的命名空間控制器擴展了此類,因此可以將該事件與該命名空間相關聯。

但是,dispatch.error事件可能會在控制器(及其名稱空間的上下文)被加載之前觸發。這根據Zend \ Mvc \ DispatchListener中的多個條件發生。

爲了自定義dispatch.error的處理方式,您可能需要爲該事件編寫自定義偵聽器,甚至可以編寫自己的DispatchListener(儘管我建議不要這樣做)。然後你可以看看routeMatch來找出下一步你想做什麼。如果你使用的是ModuleRouteListener,這可能很容易。