Ajax调用不会触发Zend 2 EVENT_DISPATCH事件

Ajax call does not trigger Zend 2 EVENT_DISPATCH event

本文关键字:EVENT DISPATCH 事件 Zend 调用 Ajax      更新时间:2024-05-03

在我的应用程序模块中,我有一个事件侦听器,它在每个页面上都会触发。取自应用程序模块中的Module.php:

public function onBootstrap(MvcEvent $e)
{
    $eventManager        = $e->getApplication()->getEventManager();
    $eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'authenticate'),1);
}
public function authenticate(){ 
    //auth here. This works on every page load except an ajax call
}

Javascript:

var adminData={ ... }
return $.post("/admin/save",adminData); //Will not trigger EVENT_DISPATCH!

我已经验证了该事件在每次页面加载时都会触发,使用javascript(ajax)调用时除外。如果我浏览到js调用的链接(/admin/save),事件就会触发。为什么用javascript调用时不会触发事件?

您必须以更高的优先级附加侦听器,这样它才会更早被触发。动作本身也是一个事件侦听器(AbstractActionController中的onDispatch),并以优先级1附加(请参阅手册)。试着把你的听众放在优先级2:

$eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'authenticate'),2);

事实证明,事件在每次调度中都会正确触发,甚至是ajax请求。但让我困惑的是,action方法中的代码将首先执行,然后是事件触发器中方法中的码。因此,我的操作代码中出现了一个错误,这取决于事件应该启动的方法。在操作方法代码之前,要监听什么事件来执行方法?