zf3 onRoute事件侦听器 [英] zf3 onRoute event listener

查看:93
本文介绍了zf3 onRoute事件侦听器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的模型中有一段代码:

I have a piece of code in my model:

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,则不会再调用侦听器.该怎么解决?

The listener is invoked. Although if I change event type to MvcEvent::EVENT_ROUTE the listener is not invoked any more. How to solve it?

推荐答案

因此,显然对象Zend \ EventManager \ EventManager两次为事件调度"调用方法triggerListener.一次将标识符设置为:

So, apparently object Zend\EventManager\EventManager calls method triggerListeners for event 'dispatch' twice. Once with identifiers set as:

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

和第二个,其标识符设置为:

and Second with identifiers set as:

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
)

因为为我的侦听器定义了应用程序标识符,所以它们在第二次调用期间执行. 当调用路由"事件时,问题开始.似乎只为这组标识符调用了一次:

Because my listeners are defined for Application identifier they are executed during 2nd call. The problem starts when call is made for 'route' event. It seems like it is called only once, just for this set of identifiers:

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

然后,不执行路由侦听器,因为它们的标识符只是"Application".要解决此问题,只需将它们附加Zend \ Mvc \ Application标识符即可:

Then later, the route listeners are not executed, because their identifier is just 'Application'. To solve it is just enough to attach them with Zend\Mvc\Application identifier:

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

这篇关于zf3 onRoute事件侦听器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆