ZF2 从事件管理器中删除匿名函数

ZF2 Remove anonymous function from event manager

在我模块的 onBootstrap 函数中,我附加了一个挂钩到 dispatch.error 事件(用于记录目的)的匿名函数:

$eventManager->attach('dispatch.error', function($e) {
    //Code here
});

我现在正在设置单元测试,不希望在测试请求上 运行 记录功能。

如何从事件管理器中删除这个匿名函数?

来自documentation

attach

[snip]

The method returns an instance of Zend\Stdlib\CallbackHandler; this value can later be passed to detach() if desired.

detach

[snip]

Scans all listeners, and detaches any that match $listener so that they will no longer be triggered.

因此我将我的 attach 更改为:

$logCallBack = $eventManager->attach('...

我要将回调保存到什么位置,以便我可以在单元测试中将其删除?

$this->getApplication()->getEventManager()->detach(???);

分配返回的处理程序,稍后使用它来分离它

$callBackHandler = $eventManager->attach('dispatch.error', function($e) {
    //Code here
});

$eventManager->detach($callBackHandler);`

我已经添加到 $_SERVER 全局变量的回调中:

$logCallBack = $eventManager->attach(['dispatch.error', 'render.error'], function($e) {
    //...
}
$_SERVER['logCallBack'] = $logCallBack;

然后我要注销它们的地方:

$callBacks = $_SERVER['logCallBack'];
if(!is_array($callBacks)) {
    $callBacks = [$callBacks];
}
foreach($callBacks as $callback) {
    $this->getApplication()->getEventManager()->detach($callback);
}