Laminas框架配置MvcEvent::EVENT_DISPATCH事件无响应如何解决?
核心问题
你绑定事件时使用的事件管理器实例有误。$moduleManager->getEventManager() 获取的是模块管理器专属的事件管理器,仅负责触发模块加载生命周期相关的事件,和MVC运行阶段的事件体系完全独立,因此你绑定的 MvcEvent::EVENT_DISPATCH 事件永远不会被触发。
修复方案
Laminas的Module类提供了专门的 onBootstrap 方法用于MVC初始化阶段的操作,你可以通过该方法拿到正确的MVC应用事件管理器,调整后的代码如下:
use Laminas\Mvc\MvcEvent; class Module { public function onBootstrap(MvcEvent $e) { ini_set("display_errors", '1'); // 获取MVC应用全局事件管理器 $eventManager = $e->getApplication()->getEventManager(); $eventManager->attach(MvcEvent::EVENT_DISPATCH, [$this, 'onDispatch']); // 如需调整事件触发优先级,可添加第三个参数,数值越高触发越早,默认值为1 // $eventManager->attach(MvcEvent::EVENT_DISPATCH, [$this, 'onDispatch'], 100); } public function onDispatch(\Laminas\EventManager\Event $event) { var_dump('ok');die; } }
内容的提问来源于stack exchange,提问作者b4rt3kk
相关产品推荐
相关产品推荐

