/** * Handle action response * * @param ControllerResponseEvent $event */ public function onActionResponse(ControllerResponseEvent $event) { if ($event->getActionResponse() instanceof TwigView) { $event->getActionResponse()->setTwig($this->twig); return; } $annotations = $this->annotationCollector->getMethodAnnotations(get_class($event->getController()), $event->getActionName()); if (isset($annotations['View']) && ($annotations['View'][0] = 'Twig')) { if (!isset($annotations['Template'])) { return; } $view = new TwigView($annotations['Template'][0], $event->getActionResponse()); $view->setTwig($this->twig); $event->setActionResponse($view); } }
/** * @param $route * @param Request $request * @param Response $response */ private function handleRoute($route, Request $request, Response $response) { $theRoute = $this->routeCollection->get($route['_route']); $controllerClass = $theRoute->getOption('karmaController'); $action = $theRoute->getOption('karmaAction'); $controller = new $controllerClass($this->dispatcher, $request, $response); /* @var $controller \ThinFrame\Karma\ViewController\AbstractController */ unset($route['_route']); $this->dispatcher->trigger($controllerActionEvent = new ControllerActionEvent($request, $response, $controller, $action, $route)); $actionResponse = $controller->trigger($action, $controllerActionEvent->getArguments()); $this->dispatcher->trigger($controllerResponseEvent = new ControllerResponseEvent($request, $response, $controller, $action, $controllerActionEvent->getArguments(), $actionResponse)); $response->setContent((string) $controllerResponseEvent->getActionResponse()); }