2017-02-10 12 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を2回呼び出します。私のリスナーがそれらは第二コール中に実行されるアプリケーション識別子のために定義されているため

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 
) 

として設定された識別子と第二:一度として設定された識別子を持ちます。 'route'イベントが呼び出されると問題が発生します。ちょうど、この識別子のセットに対して、それは一度だけ呼び出されるように思える:

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

はその後、ルートのリスナーが実行されていない、その識別子は、単に「アプリケーション」であるためです。それを解決するには、Zend \ Mvc \ Application識別子を付けてください。

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