summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold Daniels <arnold@jasny.net>2016-10-20 19:55:36 +0200
committerArnold Daniels <arnold@jasny.net>2016-10-20 19:55:36 +0200
commit708be1608e4a29aefe98f0bc7f45a398fb2c697e (patch)
treea7ac26a2064705c342b9c3916230580661d3ffc6
parente279c06ff7e7ca957d2da9cc05098c074fdd8dd1 (diff)
downloadrouter-708be1608e4a29aefe98f0bc7f45a398fb2c697e.zip
router-708be1608e4a29aefe98f0bc7f45a398fb2c697e.tar.gz
router-708be1608e4a29aefe98f0bc7f45a398fb2c697e.tar.bz2
Use Runner\Controller::instantiateController() to create a controller
Minor code cleanup
-rw-r--r--src/Router/Runner.php6
-rw-r--r--src/Router/Runner/Controller.php35
-rw-r--r--src/Router/Runner/RunnerFactory.php8
3 files changed, 29 insertions, 20 deletions
diff --git a/src/Router/Runner.php b/src/Router/Runner.php
index 87f082e..f4ececd 100644
--- a/src/Router/Runner.php
+++ b/src/Router/Runner.php
@@ -4,7 +4,6 @@ namespace Jasny\Router;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
-use Jasny\Router\Route;
/**
* A runner can be invoked in order to run the action specified in a route
@@ -30,13 +29,12 @@ abstract class Runner
*/
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, $next = null)
{
- $response = $this->run($request, $response);
+ $newResponse = $this->run($request, $response);
if (isset($next)) {
- $response = call_user_func($next, $request, $response);
+ $response = call_user_func($next, $request, $newResponse);
}
return $response;
}
}
-
diff --git a/src/Router/Runner/Controller.php b/src/Router/Runner/Controller.php
index 56cf2b5..779459a 100644
--- a/src/Router/Runner/Controller.php
+++ b/src/Router/Runner/Controller.php
@@ -7,13 +7,28 @@ use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
/**
- * Description of Controller
- *
- * @author arnold
+ * Run a route using a controller
*/
class Controller extends Runner
{
/**
+ * Create a controller object
+ *
+ * @param string $name
+ * @return
+ */
+ protected function instantiateController($name)
+ {
+ $class = \Jasny\studlycase($name);
+
+ if (!class_exists($class)) {
+ throw new \RuntimeException("Can not route to controller '$class': class not exists");
+ }
+
+ return new $class();
+ }
+
+ /**
* Route to a controller
*
* @param ServerRequestInterface $request
@@ -23,18 +38,14 @@ class Controller extends Runner
public function run(ServerRequestInterface $request, ResponseInterface $response)
{
$route = $request->getAttribute('route');
- $class = !empty($route->controller) ? $route->controller : null;
+ $name = !empty($route->controller) ? $route->controller : null;
- if (!class_exists($class)) {
- throw new \RuntimeException("Can not route to controller '$class': class not exists");
- }
-
- if (!method_exists($class, '__invoke')) {
+ $controller = $this->instantiateController($name);
+
+ if (!method_exists($controller, '__invoke')) {
throw new \RuntimeException("Can not route to controller '$class': class does not have '__invoke' method");
}
-
- $controller = new $class($route);
-
+
return $controller($request, $response);
}
}
diff --git a/src/Router/Runner/RunnerFactory.php b/src/Router/Runner/RunnerFactory.php
index e32d2cc..66df37b 100644
--- a/src/Router/Runner/RunnerFactory.php
+++ b/src/Router/Runner/RunnerFactory.php
@@ -3,6 +3,7 @@
namespace Jasny\Router\Runner;
use Jasny\Router\Route;
+use Jasny\Router\Runner;
/**
* Factory of Runner instances
@@ -18,11 +19,11 @@ class RunnerFactory
public function __invoke(Route $route)
{
if (isset($route->controller)) {
- $class = Controller::class;
+ $class = Runner\Controller::class;
} elseif (isset($route->fn)) {
- $class = Callback::class;
+ $class = Runner\Callback::class;
} elseif (isset($route->file)) {
- $class = PhpScript::class;
+ $class = Runner\PhpScript::class;
} else {
throw new \InvalidArgumentException("Route has neither 'controller', 'fn' or 'file' defined");
}
@@ -30,4 +31,3 @@ class RunnerFactory
return new $class();
}
}
-