Art*_*ida 2 event-listener zf3
我的模型中有一段代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
侦听器被调用.虽然如果我将事件类型更改为MvcEvent :: EVENT_ROUTE,则不再调用侦听器.怎么解决?
所以,显然对象Zend\EventManager\EventManager为事件'dispatch'调用方法triggerListeners两次.将标识符设置为:
Array
(
[0] => Zend\Mvc\Application
)
Run Code Online (Sandbox Code Playgroud)
和第二个标识符设置为:
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
)
Run Code Online (Sandbox Code Playgroud)
因为我的监听器是为应用程序标识符定义的,所以它们在第二次调用时执 当调用'route'事件时,问题就开始了.它似乎只被调用一次,仅用于这组标识符:
Array
(
[0] => Zend\Mvc\Application
)
Run Code Online (Sandbox Code Playgroud)
然后,路由侦听器不会被执行,因为它们的标识符只是"应用程序".要解决它就足以用Zend\Mvc\Application标识符附加它们:
$sharedEventManager->attach('Zend\Mvc\Application', MvcEvent::EVENT_ROUTE, [$this, 'myFunc'], 100);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1040 次 |
| 最近记录: |