Events zf2调度事件在我自己的事件之后触发?

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

为什么调度事件在我的控制器中我自己的事件之后触发

onBootstrap:

$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