2017-02-10 299 views
0

我有一段代碼在我的模型:ZF3 onRoute事件偵聽器

public function init(ModuleManager $manager) 
{ 
    // Get event manager. 
    $eventManager = $manager->getEventManager(); 
    $sharedEventManager = $eventManager->getSharedManager(); 
    // Register the event listener method. 
    $sharedEventManager->attach(__NAMESPACE__, MvcEvent::EVENT_DISPATCH, [$this, 'myFunc'], 100); 
} 

// Event listener method. 
public function myFunc(MvcEvent $event) 
{ 
    echo 'it works!'; 
    exit; 
} 

偵聽器調用。 雖然如果我將事件類型更改爲MvcEvent :: EVENT_ROUTE,那麼不會再調用偵聽器。如何解決它?

回答

2

因此,顯然對象Zend \ EventManager \ EventManager調用事件'dispatch'的方法triggerListeners兩次。一旦與標識設置爲:

Array 
(
    [0] => Zend\Mvc\Application 
) 

和第二位設置標識符:

Array 
(
    [0] => Zend\Mvc\Controller\AbstractController 
    [1] => Application\Controller\IndexController 
    [2] => Application 
    [3] => Zend\Stdlib\DispatchableInterface 
    [4] => Zend\EventManager\EventManagerAwareInterface 
    [5] => Zend\EventManager\EventsCapableInterface 
    [6] => Zend\Mvc\InjectApplicationEventInterface 
    [7] => Zend\Mvc\Controller\AbstractActionController 
) 

因爲我的聽衆是因爲他們是第二個呼叫過程中執行的應用程序標識符定義。 當呼叫'路由'事件時,問題就開始了。好像它被稱爲只有一次,只爲這組標識符:

Array 
(
    [0] => Zend\Mvc\Application 
) 

再後來,路線聽衆不被執行,因爲他們的標識僅僅是「應用程序」。使用Zend \ Mvc \ Application標識符來解決這個問題就足夠了:

$sharedEventManager->attach('Zend\Mvc\Application', MvcEvent::EVENT_ROUTE, [$this, 'myFunc'], 100);