diff options
author | Igor Scheller <igor.scheller@igorshp.de> | 2018-08-07 03:18:22 +0200 |
---|---|---|
committer | Igor Scheller <igor.scheller@igorshp.de> | 2018-08-14 00:17:19 +0200 |
commit | 20c03a155d2017101a098cefa602116a4a331d71 (patch) | |
tree | 7d91761680d8183bdeb4f9299800c47256086db9 /src/Middleware/ExceptionHandler.php | |
parent | 92c26718fd0799660515d64feabbbc1cd1d71a35 (diff) |
Implemented PSR-15 middleware handler
Diffstat (limited to 'src/Middleware/ExceptionHandler.php')
-rw-r--r-- | src/Middleware/ExceptionHandler.php | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/Middleware/ExceptionHandler.php b/src/Middleware/ExceptionHandler.php new file mode 100644 index 00000000..a5db0337 --- /dev/null +++ b/src/Middleware/ExceptionHandler.php @@ -0,0 +1,48 @@ +<?php + +namespace Engelsystem\Middleware; + +use Engelsystem\Exceptions\Handler as ExceptionsHandler; +use Psr\Container\ContainerInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Server\MiddlewareInterface; +use Psr\Http\Server\RequestHandlerInterface; + +class ExceptionHandler implements MiddlewareInterface +{ + /** @var ContainerInterface */ + protected $container; + + /** + * @param ContainerInterface $container + */ + public function __construct(ContainerInterface $container) + { + $this->container = $container; + } + + /** + * Handles any exceptions that occurred inside other middleware while returning it to the default response handler + * + * Should be added at the beginning + * + * @param ServerRequestInterface $request + * @param RequestHandlerInterface $handler + * @return ResponseInterface + */ + public function process( + ServerRequestInterface $request, + RequestHandlerInterface $handler + ): ResponseInterface { + try { + return $handler->handle($request); + } catch (\Throwable $e) { + /** @var ExceptionsHandler $handler */ + $handler = $this->container->get('error.handler'); + $content = $handler->exceptionHandler($e, true); + + return response($content, 500); + } + } +} |