ZF2 从事件管理器中删除匿名函数
ZF2 Remove anonymous function from event manager
在我模块的 onBootstrap
函数中,我附加了一个挂钩到 dispatch.error
事件(用于记录目的)的匿名函数:
$eventManager->attach('dispatch.error', function($e) {
//Code here
});
我现在正在设置单元测试,不希望在测试请求上 运行 记录功能。
如何从事件管理器中删除这个匿名函数?
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);
}
在我模块的 onBootstrap
函数中,我附加了一个挂钩到 dispatch.error
事件(用于记录目的)的匿名函数:
$eventManager->attach('dispatch.error', function($e) {
//Code here
});
我现在正在设置单元测试,不希望在测试请求上 运行 记录功能。
如何从事件管理器中删除这个匿名函数?
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);
}