In zend 2, how can I create an internal server error whenever an exception occurs regardless of the controller that is related to that exception?
With internal server error I only mean setting the status code to 500!
In your onBootstrap() of your Module.php attach an Event to listen for dispatch error.
$eventManager = $e->getApplication()->getEventManager();
$eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, function($event){
$response = $event->getResponse();
$response->setStatusCode(500);
return $response;
});
If you throw an error in listener of MvcEvent::EVENT_ROUTE or MvcEvent::EVENT_DISPATCH then you have to catch exception by yourself.
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);
}
}
}