summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Router/Runner/Controller.php14
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);
}
}