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

时间:2017-01-30 16:03:17

标签: events zend-framework2

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

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

我现在正在设置单元测试,并且不希望日志功能在测试请求上运行。

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

来自documentation

  

     

[剪断]

     

该方法返回Zend \ Stdlib \ CallbackHandler的一个实例;这个   如果需要,稍后可以将值传递给detach()。

  

分离

     

[剪断]

     

扫描所有侦听器,并分离任何与$ listener匹配的侦听器,以便不再触发它们。

因此我将attach改为:

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

$eventManager->detach($callBackHandler);`

答案 1 :(得分:1)

我已添加到$_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);
}