繁体   English   中英

如何在zend 2中的异常上创建内部服务器错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM