我需要在任何MvcEvent::EVENT_BOOTSTRAP
侦听器执行之前执行一些代码。显然Module::onBootstrap
是没有选择的。我以以下代码结束:
class Module
{
function init(\Zend\ModuleManager\ModuleManager $moduleManager)
{
$moduleManager->getEventManager()->attach(
MvcEvent::EVENT_BOOTSTRAP, array(ClassX, 'StaticMethodOfClassX'), 20000);
}
}
我不想对array(ClassX, 'StaticMethodOfClassX')
引用进行硬编码,而是从服务管理器那里获取。我的问题是我不知道如何在模块的 init 方法中获取服务管理器引用。有什么帮助吗?或者这在 ZF2 现在是不可能的?无论这种模式或意见的任何变体都将受到赞赏;)
编辑:
我将澄清“显然 Module::onBootstrap 不是一个选项”,因为可能不是那么微不足道;)
Module::onBootstrap
触发事件时会执行模块方法MvcEvent::EVENT_BOOTSTRAP
,但每个模块的Module::onBootstrap
方法与该事件的关联取决于加载模块的顺序。由于,特定Module::onBootstrap
方法的执行顺序取决于存在哪些其他模块以及其他模块如何影响该特定模块的加载顺序。此外,任何附加到MvcEvent::EVENT_BOOTSTRAP
优先级大于 1 的事件的侦听器都将在任何模块Module::onBootstrap
方法之前执行,例如 ViewManager::onBootstrap
侦听器。所以,要实现我想要的
我需要在任何
MvcEvent::EVENT_BOOTSTRAP
侦听器执行之前执行一些代码
模块 obBootstrap 方法不是一个选项。