/** * Handle an exception for the application. * * @param \Exception $exception * @return \Symfony\Component\HttpFoundation\Response */ public function handleException($exception) { if ($exception instanceof RedirectToException) { // Manage the Redirect comming from the Helpers\Url. $url = $exception->getUrl(); if (is_null($url)) { return Redirect::back($exception->getStatusCode()); } else { return Redirect::to($url, $exception->getStatusCode()); } } else { if (!$exception instanceof Exception) { $exception = new FatalThrowableError($exception); } } $response = $this->callCustomHandlers($exception); if (!is_null($response)) { return $this->prepareResponse($response); } return $this->displayException($exception); }
/** * handle a thrown exception * * @return boolean $use_template */ protected function handleError(\Exception $e) { // canary... /// $this->handleRecursion($e); $event = new InfoEvent('Handling Exception', array('e' => $e)); $this->broadcastEvent($event); // deprecated, this can all be removed when I remove handleRecursion $e_list = $this->getField('e_list', array()); $e_list[] = $e; $this->setField('e_list', $e_list); $ret_mixed = null; if ($e instanceof \Montage\Exception\InternalRedirectException) { $controller_response = $this->handleRequest($e->getPath()); $ret_mixed = $this->handleResponse($controller_response); } else { if ($e instanceof \Montage\Exception\RedirectException) { $response = $this->getContainer()->getResponse(); $redirect_url = $e->getUrl(); $wait_time = $e->getWait(); $response->killTemplate(); $response->setContent(''); $response->setStatusCode($e->getCode()); $response->setHeader('Location', $redirect_url); $controller_response = null; if (headers_sent()) { // http://en.wikipedia.org/wiki/Meta_refresh $response->setContent(sprintf('<meta http-equiv="refresh" content="%s;url=%s">', $wait_time, $redirect_url)); $controller_response = null; } else { if ($wait_time > 0) { sleep($wait_time); } //if $controller_response = false; } //if/else $ret_mixed = $this->handleResponse($controller_response); } else { if ($e instanceof Montage\Exception\StopException) { // don't do anything, we're done $ret_mixed = $this->handleResponse($e->getControllerResponse()); } else { if ($e instanceof \ReflectionException) { $this->handleRecovery($e); // re-handle the request... $ret_mixed = $this->handle(); } else { if ($this->isHandled(self::HANDLE_PRE)) { $event = new FilterEvent('framework.handleError', $e); $event->setField('e_list', $e_list); $this->broadcastEvent($event); $ret_mixed = $this->handleResponse($event->getParam()); // not sure this is best choice, } else { // we can't "gracefully" handle the exception because the framework isn't ready, so just throw // the exception because there is a very high probability it will fail handling // the exception again... throw $e; } //if/else } } } } //if/else return $ret_mixed; }