【发布时间】:2013-10-22 19:58:53
【问题描述】:
我需要在任何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 不是一个选项”,因为可能不是那么微不足道;)
当事件MvcEvent::EVENT_BOOTSTRAP 被触发时,模块Module::onBootstrap 方法被执行,但是每个模块的Module::onBootstrap 方法与该事件的附件依赖于加载模块的顺序。由于,特定Module::onBootstrap 方法的执行顺序取决于存在哪些其他模块以及其他模块如何影响该特定模块的加载顺序。此外,任何附加到MvcEvent::EVENT_BOOTSTRAP 事件的优先级大于1 的侦听器都将在任何模块Module::onBootstrap 方法之前执行,例如ViewManager::onBootstrap 侦听器。所以,要实现我想要的
我需要先执行一些代码
MvcEvent::EVENT_BOOTSTRAP监听器获取执行
模块 obBootstrap 方法不是一个选项。
【问题讨论】:
-
为什么不能使用onBootstrap?
-
@TimFountain 感谢蒂姆的提问。我编辑我的问题以解释为什么不。再次感谢。
标签: events module zend-framework2 servicemanager