diff --git a/core/core.services.yml b/core/core.services.yml index 465d145..8422ec5 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -375,7 +375,7 @@ services: class: Drupal\Core\EventSubscriber\ViewSubscriber tags: - { name: event_subscriber } - arguments: ['@content_negotiation'] + arguments: ['@content_negotiation', '@title_resolver'] private_key: class: Drupal\Core\PrivateKey arguments: ['@state'] diff --git a/core/lib/Drupal/Core/EventSubscriber/ViewSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/ViewSubscriber.php index ae1d083..d85dded 100644 --- a/core/lib/Drupal/Core/EventSubscriber/ViewSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/ViewSubscriber.php @@ -7,6 +7,8 @@ namespace Drupal\Core\EventSubscriber; +use Drupal\Core\Controller\TitleResolverInterface; +use Symfony\Cmf\Component\Routing\RouteObjectInterface; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpKernel\KernelEvents; @@ -25,10 +27,31 @@ */ class ViewSubscriber implements EventSubscriberInterface { + /** + * The content negotiation. + * + * @var \Drupal\Core\ContentNegotiation + */ protected $negotiation; - public function __construct(ContentNegotiation $negotiation) { + /** + * The title resolver. + * + * @var \Drupal\Core\Controller\TitleResolverInterface + */ + protected $titleResolver; + + /** + * Constructs a new ViewSubscriber. + * + * @param \Drupal\Core\ContentNegotiation $negotiation + * The content negotiation. + * @param \Drupal\Core\Controller\TitleResolverInterface $title_resolver + * The title resolver. + */ + public function __construct(ContentNegotiation $negotiation, TitleResolverInterface $title_resolver) { $this->negotiation = $negotiation; + $this->titleResolver = $title_resolver; } /** @@ -73,8 +96,8 @@ public function onView(GetResponseForControllerResultEvent $event) { } // If no title was returned fall back to one defined in the route. - if (!isset($page_result['#title']) && $request->attributes->has('_title')) { - $page_result['#title'] = $request->attributes->get('_title'); + if (!isset($page_result['#title'])) { + $page_result['#title'] = $this->titleResolver->getTitle($request, $request->attributes->get(RouteObjectInterface::ROUTE_OBJECT)); } $event->setResponse(new Response(drupal_render_page($page_result))); @@ -91,8 +114,8 @@ public function onView(GetResponseForControllerResultEvent $event) { } // If no title was returned fall back to one defined in the route. - if (!isset($page_result['#title']) && $request->attributes->has('_title')) { - $page_result['#title'] = $request->attributes->get('_title'); + if (!isset($page_result['#title'])) { + $page_result['#title'] = $this->titleResolver->getTitle($request, $request->attributes->get(RouteObjectInterface::ROUTE_OBJECT)); } $event->setResponse(new Response(drupal_render($page_result))); @@ -154,6 +177,13 @@ public function onIframeUpload(GetResponseForControllerResultEvent $event) { */ public function onHtml(GetResponseForControllerResultEvent $event) { $page_callback_result = $event->getControllerResult(); + $request = $event->getRequest(); + + // If no title was returned fall back to one defined in the route. + if (!isset($page_callback_result['#title'])) { + $page_callback_result['#title'] = $this->titleResolver->getTitle($request, $request->attributes->get(RouteObjectInterface::ROUTE_OBJECT)); + } + return new Response(drupal_render_page($page_callback_result)); }