summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Router/Runner/Controller.php6
-rw-r--r--tests/Router/Runner/ControllerTest.php18
2 files changed, 16 insertions, 8 deletions
diff --git a/src/Router/Runner/Controller.php b/src/Router/Runner/Controller.php
index 3d5e569..ceb6460 100644
--- a/src/Router/Runner/Controller.php
+++ b/src/Router/Runner/Controller.php
@@ -33,12 +33,12 @@ class Controller extends Runner
/**
* Get class name from controller name
*
- * @param string $name
+ * @param string|array $name
* @return string
*/
protected function getClass($name)
{
- return \Jasny\studlycase($name) . 'Controller';
+ return join('\\', array_map('Jasny\studlycase', (array)$name)) . 'Controller';
}
/**
@@ -64,7 +64,7 @@ class Controller extends Runner
{
$route = $request->getAttribute('route');
$name = !empty($route->controller) ? $route->controller : null;
-
+
$class = $this->getClass($name);
if (!class_exists($class)) {
diff --git a/tests/Router/Runner/ControllerTest.php b/tests/Router/Runner/ControllerTest.php
index 5bbbeca..4d1a40f 100644
--- a/tests/Router/Runner/ControllerTest.php
+++ b/tests/Router/Runner/ControllerTest.php
@@ -46,16 +46,23 @@ class ControllerTest extends \PHPUnit_Framework_TestCase
$runnerNotExists->expects($this->never())->method('instantiate');
$runnerNotCallable = $this->createPartialMock(Runner\Controller::class, ['instantiate', 'getClass']);
- $runnerNotCallable->expects($this->once())->method('getClass')->with('foo-bar-zoo')->willReturn('stdClass');
+ $runnerNotCallable->expects($this->once())->method('getClass')->with('foo')->willReturn('stdClass');
$runnerNotCallable->expects($this->never())->method('instantiate');
return [
[
$runnerNotExists,
+ 'foo-bar-zoo',
"Can't route to controller 'FooBarZooController': class not exists"
],
[
+ $runnerNotExists,
+ ['foo', 'bar', 'zoo'],
+ "Can't route to controller 'Foo\Bar\ZooController': class not exists"
+ ],
+ [
$runnerNotCallable,
+ 'foo',
"Can't route to controller 'stdClass': class does not have '__invoke' method"
]
];
@@ -64,10 +71,11 @@ class ControllerTest extends \PHPUnit_Framework_TestCase
/**
* @dataProvider invalidProvider
*
- * @param Runner $runner
- * @param string $message
+ * @param Runner $runner
+ * @param string|array $controller
+ * @param string $message
*/
- public function testInvokeInvalid(Runner $runner, $message)
+ public function testInvokeInvalid(Runner $runner, $controller, $message)
{
$request = $this->createMock(ServerRequestInterface::class);
$request->method('getProtocolVersion')->willReturn('1.1');
@@ -85,7 +93,7 @@ class ControllerTest extends \PHPUnit_Framework_TestCase
->willReturn($notFound);
$route = $this->createMock(Route::class);
- $route->controller = 'foo-bar-zoo';
+ $route->controller = $controller;
$request->expects($this->once())->method('getAttribute')->with('route')->willReturn($route);