Events zf2调度事件在我自己的事件之后触发?
为什么调度事件在我的控制器中我自己的事件之后触发 onBootstrap:Events zf2调度事件在我自己的事件之后触发?,events,zend-framework2,dispatch,Events,Zend Framework2,Dispatch,为什么调度事件在我的控制器中我自己的事件之后触发 onBootstrap: $sharedManager->attach('*', '*', function($e) { Debug::dump($e->getName()); }); 指数化: $this->getEventManager()->trigger(__FUNCTION__ . '.pre', $this); Debug::dump('indexAction do...'); $this->g
$sharedManager->attach('*', '*', function($e) {
Debug::dump($e->getName());
});
指数化:
$this->getEventManager()->trigger(__FUNCTION__ . '.pre', $this);
Debug::dump('indexAction do...');
$this->getEventManager()->trigger(__FUNCTION__ . '.post', $this);
结果是:
string(5) "route"
string(15) "indexAction.pre"
string(17) "indexAction do..."
string(16) "indexAction.post"
string(8) "dispatch"
string(8) "dispatch"
string(6) "render"
string(8) "renderer"
string(13) "renderer.post"
string(8) "renderer"
string(13) "renderer.post"
string(8) "response"
string(6) "finish"
string(12) "sendResponse"
我发现分派过程:
但这似乎是不正确的
我以为调度事件将被触发为dispatch.pre,而不是dispatch.post…您的调试方法会给您带来奇怪的结果 通过添加具有默认事件优先级(即
1
)的“调试侦听器”,事件名称的输出实际上发生在分派事件发生之后
这是因为ZF2首先注册控制器的调度
事件(事件优先级也为1)。因此,事件以正确的顺序发生;这只是你的听众在错误的时间输出
您可以通过在Zend\EventManager\EventManager::trigger()中添加一行来测试事件的顺序。
有趣;只是尝试了一下,得到了同样的结果。
// Zend\EventManager\EventManager
public function trigger($event, $target = null, $argv = array(), $callback = null)
{
echo '<br>Triggered: ' . $event;
//...
}
Triggered: bootstrap
Triggered: route
Triggered: dispatch // MVC dispatch
Triggered: dispatch // Action Controller disaptch
Triggered: foo.pre // Controller custom events
Triggered: foo.post // Controller custom events
Triggered: render
Triggered: renderer
Triggered: renderer.post
Triggered: renderer
Triggered: renderer.post
Triggered: response
Triggered: finish