Triggers Zend Framework 2如何在ListenerAggregateInterface中触发MvcEvent
我想在侦听器中触发错误事件并发送自定义http状态代码(409)-请参阅OneEvent 我已通过侦听器配置附加了侦听器Triggers Zend Framework 2如何在ListenerAggregateInterface中触发MvcEvent,triggers,zend-framework2,listener,Triggers,Zend Framework2,Listener,我想在侦听器中触发错误事件并发送自定义http状态代码(409)-请参阅OneEvent 我已通过侦听器配置附加了侦听器 return [ 'service_manager' => array( 'invokables' => array( 'SendFeedListener' => 'MyModule\Listener\SendFeedListener', ), ), 'listeners' => array( 'SendFeed
return [
'service_manager' => array(
'invokables' => array(
'SendFeedListener' => 'MyModule\Listener\SendFeedListener',
),
),
'listeners' => array(
'SendFeedListener',
),
];
我的听众:
class SendFeedListener implements ListenerAggregateInterface, ServiceLocatorAwareInterface
{
use ServiceLocatorAwareTrait, ConfigAwareTrait;
/**
* @var \Zend\Stdlib\CallbackHandler[]
*/
protected $listeners = [];
public function attach(EventManagerInterface $events)
{
$sharedEvents = $events->getSharedManager();
$this->listeners[] = $sharedEvents->attach(
'MyModule\\Service\\MyService',
'*', // listen for all events
array($this, 'onEvent'),
100
);
}
...
public function onEvent(EventInterface $e)
{
// ... some code
// it went wrong, I want to trigger some error
if($this->getMyService()->doSomething() == false) {
$mvcEvent = $this->getServiceLocator()->get('application')->getMvcEvent();
$this->getServiceLocator()->get('application')
->getEventManager()
->trigger(MvcEvent::EVENT_DISPATCH_ERROR, $mvcEvent);
}
}
...
}
}
我能做的事情如下:
// something went wrong
$sharedEvents = $e->getTarget()->getEventManager()->getSharedManager();
$sharedEvents->attach('Zend\\Mvc\\Application', MvcEvent::EVENT_RENDER,
array($this, 'errorResponse'), -10000);
public function errorResponse($e)
{
$response = $e->getResponse();
$response->setStatusCode(409);
$response->setContent((new JsonModel($this->error->toArray()))->serialize());
}
但是它看起来非常疯狂试试这个:
$e->setError('my-custom-error');
$e->getTarget()->getEventManager()->trigger('dispatch.error', $e);
我不确定100%,但如果我没记错的话,您只能在onRoute
期间和触发dispatch
之前触发dispatch.error