diff options
Diffstat (limited to 'src/Router/Runner')
-rw-r--r-- | src/Router/Runner/Controller.php | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/Router/Runner/Controller.php b/src/Router/Runner/Controller.php index ed8c060..0969c21 100644 --- a/src/Router/Runner/Controller.php +++ b/src/Router/Runner/Controller.php @@ -14,7 +14,7 @@ use Psr\Http\Message\ResponseInterface; class Controller extends Runner { /** - * Route to a file + * Route to a controller * * @param RequestInterface $request * @param ResponseInterface $response @@ -22,6 +22,18 @@ class Controller extends Runner */ public function run(RequestInterface $request, ResponseInterface $response) { + $class = !empty($this->route->controller) ? $this->route->controller : null; + if (!class_exists($class)) { + throw new \RuntimeException("Can not route to controller '$class': class not exists"); + } + + if (!method_exists($class, '__invoke')) { + throw new \RuntimeException("Can not route to controller '$class': class does not have '__invoke' method"); + } + + $controller = new $class($this->route); + + return $controller($request, $response); } } |