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