private function doHandleRequest(Request $request) { $event = $this->dispatch(KernelEvents::REQUEST, new KernelEvent($request)); if ($event->hasResponse()) { return $event->getResponse(); } // Create the controller based on request attributes $controller = $this->factory->createController($request->getAttributes()); $event = $this->dispatch(KernelEvents::CONTROLLER, new ControllerEvent($controller, $request)); $response = call_user_func_array($event->getController(), [$request]); if (!$response instanceof Response) { throw new \RuntimeException('A controller must return a Response object.'); } return $response; }