/** * Handle PHP Exception * @SuppressWarnings(PHPMD.ExitExpression) * @param Exception $exception */ public function handleException(\Exception $exception) { $message = $exception->getMessage(); $userMessage = 'Unspecified Technical Difficulties'; $code = 500; $log = $this->_log; if ($exception instanceof \Lvc_Exception) { $code = 404; $log = $this->_404Log; $userMessage = 'Sorry the page you are looking for could not be found.'; } if ($exception instanceof \PDOException) { $message = 'Problem with database connection. PDO says: ' . $message; $userMessage = 'We are experiencing a problem connecting to our database. Please try your request again.'; } if ($exception instanceof \Foundation\Exception) { $userMessage = $exception->getUserMessage(); } if ($exception instanceof \Foundation\Virtual\Exception) { $userMessage = $exception->getUserMessage(); $code = $exception->getHttpErrorCode(); $log = $this->_404Log; } /* Map the PHP error to a Log priority. */ switch ($exception->getCode()) { case E_WARNING: case E_USER_WARNING: $priority = \Monolog\Logger::WARNING; break; case E_NOTICE: case E_USER_NOTICE: $priority = \Monolog\Logger::INFO; break; case E_ERROR: case E_USER_ERROR: $priority = \Monolog\Logger::CRITICAL; break; default: $priority = \Monolog\Logger::INFO; } $log->addRecord($priority, $message); //send the error to PHP as well error_log($message); // Get a request for the error page $request = new \Lvc_Request(); $request->setControllerName('error'); $request->setActionName('index'); $request->setActionParams(array('error' => $code, 'message' => $userMessage)); // Get a new front controller without any routers, and have it process our handmade request. $frontController = new \Lvc_FrontController(); $frontController->processRequest($request); exit(1); }