Browse Source

Working on exception handling. WIP.

Taylor Otwell 9 years ago
parent
commit
1209ce7657
4 changed files with 74 additions and 2 deletions
  1. 3 1
      app/Console/Kernel.php
  2. 3 1
      app/Http/Kernel.php
  3. 63 0
      app/Infrastructure/ExceptionHandler.php
  4. 5 0
      bootstrap/app.php

+ 3 - 1
app/Console/Kernel.php

@@ -29,7 +29,9 @@ class Kernel extends ConsoleKernel {
 		}
 		catch (Exception $e)
 		{
-			$output->writeln((string) $e);
+			$this->reportException($e);
+
+			$this->renderException($output, $e);
 
 			return 1;
 		}

+ 3 - 1
app/Http/Kernel.php

@@ -34,7 +34,9 @@ class Kernel extends HttpKernel {
 		}
 		catch (Exception $e)
 		{
-			throw $e;
+			$this->reportException($e);
+
+			return $this->renderException($request, $e);
 		}
 	}
 

+ 63 - 0
app/Infrastructure/ExceptionHandler.php

@@ -0,0 +1,63 @@
+<?php namespace App\Infrastructure;
+
+use Exception;
+use Psr\Log\LoggerInterface;
+use Symfony\Component\Debug\ExceptionHandler as SymfonyDisplayer;
+use Illuminate\Contracts\Debug\ExceptionHandler as ExceptionHandlerContract;
+
+class ExceptionHandler implements ExceptionHandlerContract {
+
+	/**
+	 * The log implementation.
+	 *
+	 * @var \Psr\Log\LoggerInterface
+	 */
+	protected $log;
+
+	/**
+	 * Create a new exception handler instance.
+	 *
+	 * @param  \Psr\Log\LoggerInterface  $log
+	 * @return void
+	 */
+	public function __construct(LoggerInterface $log)
+	{
+		$this->log = $log;
+	}
+
+	/**
+	 * Report or log an exception.
+	 *
+	 * @param  \Exception  $e
+	 * @return void
+	 */
+	public function report(Exception $e)
+	{
+		$this->log->error((string) $e);
+	}
+
+	/**
+	 * Render an exception into a response.
+	 *
+	 * @param  \Illuminate\Http\Request  $request
+	 * @param  \Exception  $e
+	 * @return \Symfony\Component\HttpFoundation\Response
+	 */
+	public function render($request, Exception $e)
+	{
+		return (new SymfonyDisplayer)->createResponse($e);
+	}
+
+	/**
+	 * Render an exception to the console.
+	 *
+	 * @param  \Symfony\Component\Console\Output\OutputInterface  $output
+	 * @param  \Exception  $e
+	 * @return void
+	 */
+	public function renderForConsole($output, Exception $e)
+	{
+		$output->writeln((string) $e);
+	}
+
+}

+ 5 - 0
bootstrap/app.php

@@ -36,6 +36,11 @@ $app->singleton(
 	'App\Console\Kernel'
 );
 
+$app->singleton(
+	'Illuminate\Contracts\Debug\ExceptionHandler',
+	'App\Infrastructure\ExceptionHandler'
+);
+
 /*
 |--------------------------------------------------------------------------
 | Return The Application