From cc17ebbe484cef61e74fadaa0817ba6f70efcc1b Mon Sep 17 00:00:00 2001 From: Phil Date: Wed, 31 Dec 2014 21:06:06 +0000 Subject: [PATCH] Added support for custom error handlers --- src/pjdietz/WellRESTed/Router.php | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/pjdietz/WellRESTed/Router.php b/src/pjdietz/WellRESTed/Router.php index 34bd164..aaf6cc7 100644 --- a/src/pjdietz/WellRESTed/Router.php +++ b/src/pjdietz/WellRESTed/Router.php @@ -23,6 +23,8 @@ class Router implements HandlerInterface { /** @var array Array of Route objects */ private $routes; + /** @var array Array of Route objects for error handling. */ + private $errorHandlers; /** Create a new Router. */ public function __construct() @@ -73,6 +75,29 @@ class Router implements HandlerInterface } } + /** + * Add a custom error handler. + * + * @param integer $error The error code. + * @param HandlerInterface $errorHandler The handler for the error. + */ + public function addErrorHandler($error, $errorHandler) + { + $this->errorHandlers[$error] = $errorHandler; + } + + /** + * Add custom error handlers. + * + * @param array $errorHandlers An array mapping an integer error code to something implementing an HandlerInterface. + */ + public function addErrorHandlers(array $errorHandlers) + { + foreach ($errorHandlers as $error => $errorHandler) { + $this->addErrorHandler($error, $errorHandler); + } + } + /** * Dispatch the singleton Request through the router and output the response. * @@ -85,6 +110,11 @@ class Router implements HandlerInterface if (!$response) { $response = $this->getNoRouteResponse($request); } + $status = $response->getStatusCode(); + if (array_key_exists($status, $this->errorHandlers)) { + $errorHandler = new $this->errorHandlers[$status](); + $response = $errorHandler->getResponse($request, $args); + } $response->respond(); }