/** * Sets a response given a (main content) render array. * * @param \Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent $event * The event to process. */ public function onViewRenderArray(GetResponseForControllerResultEvent $event) { $request = $event->getRequest(); $result = $event->getControllerResult(); // Render the controller result into a response if it's a render array. if (is_array($result) && ($request->query->has(static::WRAPPER_FORMAT) || $request->getRequestFormat() == 'html')) { $wrapper = $request->query->get(static::WRAPPER_FORMAT, 'html'); // Fall back to HTML if the requested wrapper envelope is not available. $wrapper = isset($this->mainContentRenderers[$wrapper]) ? $wrapper : 'html'; $renderer = $this->classResolver->getInstanceFromDefinition($this->mainContentRenderers[$wrapper]); $event->setResponse($renderer->renderResponse($result, $request, $this->routeMatch)); } }
/** * Sets a response given a (main content) render array. * * @param \Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent $event * The event to process. */ public function onViewRenderArray(GetResponseForControllerResultEvent $event) { $request = $event->getRequest(); $result = $event->getControllerResult(); $format = $request->getRequestFormat(); // Render the controller result into a response if it's a render array. if (is_array($result)) { if (isset($this->mainContentRenderers[$format])) { $renderer = $this->classResolver->getInstanceFromDefinition($this->mainContentRenderers[$format]); $event->setResponse($renderer->renderResponse($result, $request, $this->routeMatch)); } else { $supported_formats = array_keys($this->mainContentRenderers); $supported_mimetypes = array_map([$request, 'getMimeType'], $supported_formats); $event->setResponse(new JsonResponse(['message' => 'Not Acceptable.', 'supported_mime_types' => $supported_mimetypes], 406)); } } }
/** * Sets a response given a (main content) render array. * * @param \Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent $event * The event to process. */ public function onViewRenderArray(GetResponseForControllerResultEvent $event) { $request = $event->getRequest(); $result = $event->getControllerResult(); // Render the controller result into a response if it's a render array. if (is_array($result) && ($request->query->has(static::WRAPPER_FORMAT) || $request->getRequestFormat() == 'html')) { $wrapper = $request->query->get(static::WRAPPER_FORMAT, 'html'); // Fall back to HTML if the requested wrapper envelope is not available. $wrapper = isset($this->mainContentRenderers[$wrapper]) ? $wrapper : 'html'; $renderer = $this->classResolver->getInstanceFromDefinition($this->mainContentRenderers[$wrapper]); $response = $renderer->renderResponse($result, $request, $this->routeMatch); // The main content render array is rendered into a different Response // object, depending on the specified wrapper format. if ($response instanceof CacheableResponseInterface) { $main_content_view_subscriber_cacheability = (new CacheableMetadata())->setCacheContexts(['url.query_args:' . static::WRAPPER_FORMAT]); $response->addCacheableDependency($main_content_view_subscriber_cacheability); } $event->setResponse($response); } }