[英]How to create Internal server error on exception in zend 2
在zend 2中,无论何时发生异常,无论与该异常相关的控制器如何,如何创建内部服务器错误?
对于内部服务器错误,我只想将状态代码设置为500!
在Module.php的onBootstrap()中,附加一个事件以侦听调度错误。
$eventManager = $e->getApplication()->getEventManager();
$eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, function($event){
$response = $event->getResponse();
$response->setStatusCode(500);
return $response;
});
如果您在MvcEvent :: EVENT_ROUTE或MvcEvent :: EVENT_DISPATCH的侦听器中引发错误,则您必须自己捕获异常。
public function onDispatch(MvcEvent $event)
{
$routeMatch = $event->getRouteMatch();
$controllerName = $routeMatch->getParam('controller', 'not-found');
/** @var Application $application */
$application = $event->getApplication();
$events = $application->getEventManager();
$route = $routeMatch->getMatchedRouteName();
$request = $event->getRequest();
$controllerLoader = $application->getServiceManager()->get('ControllerManager');
if ($controllerLoader->has($controllerName)) {
$controller = $controllerLoader->get($controllerName);
try {
if ($route == "requests" && $request instanceof Request && $request->getMethod() == 'POST') {
$this->checkAuthRequest($request);
}
} catch (\Exception $ex) {
$event->setError($application::ERROR_EXCEPTION)
->setController($controllerName)
->setControllerClass(get_class($controller))
->setParam('exception', $ex);
$events->trigger(MvcEvent::EVENT_DISPATCH_ERROR, $event);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.