diff options
-rw-r--r-- | src/Router/Runner/Controller.php | 6 | ||||
-rw-r--r-- | tests/Router/Runner/ControllerTest.php | 18 |
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); |