/** * Guesses the template name to render and its variables and adds them to * the request object. * * @param FilterControllerEvent $event A FilterControllerEvent instance */ public function onKernelController(FilterControllerEvent $event) { $request = $event->getRequest(); if ($configuration = $request->attributes->get('_view')) { $request->attributes->set('_template', $configuration); } parent::onKernelController($event); }
/** * Renders the parameters and template and initializes a new response object with the * rendered content. * * @param GetResponseForControllerResultEvent $event A GetResponseForControllerResultEvent instance */ public function onKernelView(GetResponseForControllerResultEvent $event) { $request = $event->getRequest(); $configuration = $request->attributes->get('_view'); $view = $event->getControllerResult(); if (!$view instanceof View) { if (!$configuration && !$this->container->getParameter('fos_rest.view_response_listener.force_view')) { return parent::onKernelView($event); } $view = new View($view); } if ($configuration) { if ($configuration->getTemplateVar()) { $view->setTemplateVar($configuration->getTemplateVar()); } if (null === $view->getStatusCode() && $configuration->getStatusCode()) { $view->setStatusCode($configuration->getStatusCode()); } if ($configuration->getSerializerGroups()) { $context = $view->getSerializationContext() ?: new SerializationContext(); $context->setGroups($configuration->getSerializerGroups()); $view->setSerializationContext($context); } } if (null === $view->getFormat()) { $view->setFormat($request->getRequestFormat()); } $vars = $request->attributes->get('_template_vars'); if (!$vars) { $vars = $request->attributes->get('_template_default_vars'); } $viewHandler = $this->container->get('fos_rest.view_handler'); if ($viewHandler->isFormatTemplating($view->getFormat())) { if (!empty($vars)) { $parameters = (array) $viewHandler->prepareTemplateParameters($view); foreach ($vars as $var) { if (!array_key_exists($var, $parameters)) { $parameters[$var] = $request->attributes->get($var); } } $view->setData($parameters); } $template = $request->attributes->get('_template'); if ($template) { if ($template instanceof TemplateReference) { $template->set('format', null); } $view->setTemplate($template); } } $response = $viewHandler->handle($view, $request); $event->setResponse($response); }
protected function guessTemplateName($controller, Request $request, $engine = 'twig') { $controllerClass = get_class($controller[0]); $userClass = ClassUtils::getUserClass($controllerClass); if ($controllerClass === $userClass) { return parent::guessTemplateName($controller, $request, $engine); } if (!preg_match('/Controller\\\\(.+)Controller$/', $userClass, $matchController)) { throw new \InvalidArgumentException(sprintf('The "%s" class does not look like a controller class (it must be in a "Controller" sub-namespace and the class name must end with "Controller")', $userClass)); } if (!preg_match('/^(.+)Action$/', $controller[1], $matchAction)) { throw new \InvalidArgumentException(sprintf('The "%s" method does not look like an action method (it does not end with Action)', $controller[1])); } $bundle = $this->getBundleForClass($userClass); return new TemplateReference($bundle->getName(), $matchController[1], $matchAction[1], $request->getRequestFormat(), $engine); }
public function onKernelView(GetResponseForControllerResultEvent $event) { $request = $event->getRequest(); /** @var Jsend $configuration */ $configuration = $request->attributes->get('_jsend'); if (!$configuration) { return parent::onKernelView($event); } $view = $event->getControllerResult(); if ($view instanceof Form && !$view->isValid()) { $configuration->setDataVar('form'); $configuration->setStatus(Jsend::STATUS_FAIL); } if ($configuration->getStatus() == Jsend::STATUS_FAIL) { $viewConfig = $request->attributes->get('_view'); if (!$viewConfig) { $viewConfig = new View(array()); $request->attributes->set('_view', $viewConfig); } $viewConfig->setStatusCode(400); } $result = array('status' => $configuration->getStatus(), 'data' => array($configuration->getDataVar() => $view)); $event->setControllerResult($result); }
/** * Renders the parameters and template and initializes a new response object with the * rendered content. * * @param GetResponseForControllerResultEvent $event */ public function onKernelView(GetResponseForControllerResultEvent $event) { $request = $event->getRequest(); /** @var \FOS\RestBundle\Controller\Annotations\View $configuration */ $configuration = $request->attributes->get('_view'); $view = $event->getControllerResult(); $customViewDefined = true; if (!$view instanceof View) { if (!$configuration && !$this->container->getParameter('fos_rest.view_response_listener.force_view')) { return parent::onKernelView($event); } $view = new View($view); $customViewDefined = false; } if ($configuration) { if ($configuration->getTemplateVar()) { $view->setTemplateVar($configuration->getTemplateVar()); } if ($configuration->getStatusCode() && (null === $view->getStatusCode() || Codes::HTTP_OK === $view->getStatusCode())) { $view->setStatusCode($configuration->getStatusCode()); } if ($configuration->getSerializerGroups() && !$customViewDefined) { $context = $view->getSerializationContext() ?: new SerializationContext(); $context->setGroups($configuration->getSerializerGroups()); $view->setSerializationContext($context); } if ($configuration->getSerializerEnableMaxDepthChecks()) { $context = $view->getSerializationContext() ?: new SerializationContext(); $context->enableMaxDepthChecks(); $view->setSerializationContext($context); } $populateDefaultVars = $configuration->isPopulateDefaultVars(); } else { $populateDefaultVars = true; } if (null === $view->getFormat()) { $view->setFormat($request->getRequestFormat()); } $vars = $request->attributes->get('_template_vars'); if (!$vars && $populateDefaultVars) { $vars = $request->attributes->get('_template_default_vars'); } $viewHandler = $this->container->get('fos_rest.view_handler'); if ($viewHandler->isFormatTemplating($view->getFormat())) { if (!empty($vars)) { $parameters = (array) $viewHandler->prepareTemplateParameters($view); foreach ($vars as $var) { if (!array_key_exists($var, $parameters)) { $parameters[$var] = $request->attributes->get($var); } } $view->setData($parameters); } $template = $request->attributes->get('_template'); if ($template) { if ($template instanceof TemplateReference) { $template->set('format', null); } $view->setTemplate($template); } } $response = $viewHandler->handle($view, $request); $event->setResponse($response); }