| 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);
 
- 	}
 
- }
 
 
  |