public function testControllerWithArguments() { $collection = new RouteCollection(); $collection->add('detail', (new Route('/detail/{id}/{slug}'))->setRequirement('id', '\\d+')->setRequirement('slug', '[a-z\\-]+')->handleWith('app.controller.default:detail')); $request = Request::create('/detail/5/hello-world', Request::HTTP_METHOD_POST); $kernel = $this->buildKernel($request, $collection); $kernel->boot(); $this->assertSame('POST: hello-world-5', $this->responseEvent->getResponse()->getContent()); }
public function testKernel() { $collection = new RouteCollection(); $collection->add('home', RouteFactory::createHttpGet('/', function () { return new Response('Hello world'); })); $kernel = $this->buildKernel(Request::create('/'), $collection); $kernel->boot(); $this->assertEquals('Hello world', $this->responseEvent->getResponse()->getContent()); }
public function testLogoutOnLoginController() { $request = Request::create('/logout', Request::HTTP_METHOD_GET); $request->getCookieBag()->set('username', 'iqbal'); $kernel = $this->buildKernel($this->getRouteCollection(), $request); $kernel->boot(); $this->assertEquals('Logout', $this->responseEvent->getResponse()->getContent()); }
/** * Compile string handler. * * @param Route $route * @param RequestContext $request * @param string $handler * * @return Response|null * * @throws HttpNotFoundException */ protected function compileStringHandler(Route $route, RequestContext $request, $handler) { $parts = explode(':', $handler); $parameters = array_map('convert_to_camel_case', array_flip((array) $request->getParameters())); $parameters = array_flip($parameters); $action = end($parts); $controller = $this->buildController($handler, $parts, $parameters); if (!method_exists($controller->getOriginalInstance(), $action . 'Action')) { throw new HttpNotFoundException(sprintf('Action "%sAction" not found on controller "%s".', $action, get_class($controller->getOriginalInstance()))); } return $this->dispatchMiddlewares($route, $request, function () use($parameters, $controller, $action) { if (!$this->responseEvent->hasResponse()) { return $controller->callMethod($action . 'Action', $parameters); } return $this->responseEvent->getResponse(); }, $action); }