/** * @param Router $router * @return string */ protected function dispatchController(Router $router) { $responder = $router->getResponder(); $parameters = $router->getParameters(); $request = new Request($this->requestMethod); $response = new TwigView(); try { /** @var AbstractController $controller */ $controller = new $responder($request, $response); if (!method_exists($controller, $this->requestMethod)) { // Send HTTP 405 response $controller->handleNotSupportedMethod($this->requestMethod); } $defaultTemplateName = $this->determineDefaultTemplateName($controller); if ($defaultTemplateName) { $response->setTemplateName($defaultTemplateName); } $controller->setParameters($parameters); $controller->initialize(); $output = $controller->{$this->requestMethod}($parameters); if ($output === NULL) { $output = $response->render(); } return $output; } catch (DispatchingInterruptedException $e) { $output = ''; } return $output; }
/** * @test */ public function routeWithSubpaths() { $this->loadRoutesFile('subpaths'); $router = new Router('/user/42/group/23/edit/'); /** @var callable $responder_callable */ $responder_callable = $router->getResponder(); $this->assertTrue(is_callable($responder_callable)); $this->assertSame('user:42:group:23:edit', call_user_func($responder_callable, $router->getParameters())); }