Same filename and directory in other branches
- 8.9.x core/lib/Drupal/Core/EventSubscriber/MainContentViewSubscriber.php
- 9 core/lib/Drupal/Core/EventSubscriber/MainContentViewSubscriber.php
Namespace
Drupal\Core\EventSubscriber
File
core/lib/Drupal/Core/EventSubscriber/MainContentViewSubscriber.php
View source
<?php
namespace Drupal\Core\EventSubscriber;
use Drupal\Core\Cache\CacheableMetadata;
use Drupal\Core\Cache\CacheableResponseInterface;
use Drupal\Core\DependencyInjection\ClassResolverInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class MainContentViewSubscriber implements EventSubscriberInterface {
protected $classResolver;
protected $routeMatch;
protected $mainContentRenderers;
const WRAPPER_FORMAT = '_wrapper_format';
public function __construct(ClassResolverInterface $class_resolver, RouteMatchInterface $route_match, array $main_content_renderers) {
$this->classResolver = $class_resolver;
$this->routeMatch = $route_match;
$this->mainContentRenderers = $main_content_renderers;
}
public function onViewRenderArray(ViewEvent $event) {
$request = $event
->getRequest();
$result = $event
->getControllerResult();
if (is_array($result) && ($request->query
->has(static::WRAPPER_FORMAT) || $request
->getRequestFormat() == 'html')) {
$wrapper = $request->query
->get(static::WRAPPER_FORMAT, 'html');
$wrapper = isset($this->mainContentRenderers[$wrapper]) ? $wrapper : 'html';
$renderer = $this->classResolver
->getInstanceFromDefinition($this->mainContentRenderers[$wrapper]);
$response = $renderer
->renderResponse($result, $request, $this->routeMatch);
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);
}
}
public static function getSubscribedEvents() : array {
$events[KernelEvents::VIEW][] = [
'onViewRenderArray',
];
return $events;
}
}
Classes