123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- <?php namespace System\Exception;
- use System\View;
- use System\Config;
- use System\Response;
- class Handler {
- /**
- * The exception examiner for the exception being handled.
- *
- * @var Examiner
- */
- public $exception;
- /**
- * Create a new exception handler instance.
- *
- * @param Exception $e
- * @return void
- */
- public function __construct($e)
- {
- $this->exception = new Examiner($e);
- }
- /**
- * Create a new exception handler instance.
- *
- * @param Exception $e
- * @return Handler
- */
- public static function make($e)
- {
- return new static($e);
- }
- /**
- * Handle the exception and display the error report.
- *
- * The exception will be logged if error logging is enabled.
- *
- * The output buffer will be cleaned so nothing is sent to the browser except the
- * error message. This prevents any views that have already been rendered from
- * being shown in an incomplete or erroneous state.
- *
- * After the exception is displayed, the request will be halted.
- *
- * @return void
- */
- public function handle()
- {
- if (ob_get_level() > 0) ob_clean();
- if (Config::get('error.log')) $this->log();
- $this->get_response(Config::get('error.detail'))->send();
- exit(1);
- }
- /**
- * Log the exception using the logger closure specified in the error configuration.
- *
- * @return void
- */
- private function log()
- {
- $parameters = array(
- $this->exception->severity(),
- $this->exception->message(),
- $this->exception->getTraceAsString(),
- );
- call_user_func_array(Config::get('error.logger'), $parameters);
- }
- /**
- * Get the error report response for the exception.
- *
- * @param bool $detailed
- * @return Resposne
- */
- private function get_response($detailed)
- {
- return ($detailed) ? $this->detailed_response() : Response::error('500');
- }
- /**
- * Get the detailed error report for the exception.
- *
- * @return Response
- */
- private function detailed_response()
- {
- $data = array(
- 'severity' => $this->exception->severity(),
- 'message' => $this->exception->message(),
- 'line' => $this->exception->getLine(),
- 'trace' => $this->exception->getTraceAsString(),
- 'contexts' => $this->exception->context(),
- );
- return Response::make(View::make('error.exception', $data), 500);
- }
- }
|