annotate core/lib/Drupal/Core/Controller/TitleResolver.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Core\Controller;
Chris@0 4
Chris@0 5 use Drupal\Core\StringTranslation\StringTranslationTrait;
Chris@0 6 use Drupal\Core\StringTranslation\TranslationInterface;
Chris@0 7 use Symfony\Component\HttpFoundation\Request;
Chris@17 8 use Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface;
Chris@0 9 use Symfony\Component\Routing\Route;
Chris@0 10
Chris@0 11 /**
Chris@0 12 * Provides the default implementation of the title resolver interface.
Chris@0 13 */
Chris@0 14 class TitleResolver implements TitleResolverInterface {
Chris@0 15 use StringTranslationTrait;
Chris@0 16
Chris@0 17 /**
Chris@0 18 * The controller resolver.
Chris@0 19 *
Chris@0 20 * @var \Drupal\Core\Controller\ControllerResolverInterface
Chris@0 21 */
Chris@0 22 protected $controllerResolver;
Chris@0 23
Chris@0 24 /**
Chris@17 25 * The argument resolver.
Chris@17 26 *
Chris@17 27 * @var \Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface
Chris@17 28 */
Chris@17 29 protected $argumentResolver;
Chris@17 30
Chris@17 31 /**
Chris@0 32 * Constructs a TitleResolver instance.
Chris@0 33 *
Chris@0 34 * @param \Drupal\Core\Controller\ControllerResolverInterface $controller_resolver
Chris@0 35 * The controller resolver.
Chris@0 36 * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
Chris@0 37 * The translation manager.
Chris@17 38 * @param \Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface $argument_resolver
Chris@17 39 * The argument resolver.
Chris@0 40 */
Chris@17 41 public function __construct(ControllerResolverInterface $controller_resolver, TranslationInterface $string_translation, ArgumentResolverInterface $argument_resolver) {
Chris@0 42 $this->controllerResolver = $controller_resolver;
Chris@0 43 $this->stringTranslation = $string_translation;
Chris@17 44 $this->argumentResolver = $argument_resolver;
Chris@0 45 }
Chris@0 46
Chris@0 47 /**
Chris@0 48 * {@inheritdoc}
Chris@0 49 */
Chris@0 50 public function getTitle(Request $request, Route $route) {
Chris@0 51 $route_title = NULL;
Chris@0 52 // A dynamic title takes priority. Route::getDefault() returns NULL if the
Chris@0 53 // named default is not set. By testing the value directly, we also avoid
Chris@0 54 // trying to use empty values.
Chris@0 55 if ($callback = $route->getDefault('_title_callback')) {
Chris@0 56 $callable = $this->controllerResolver->getControllerFromDefinition($callback);
Chris@17 57 $arguments = $this->argumentResolver->getArguments($request, $callable);
Chris@0 58 $route_title = call_user_func_array($callable, $arguments);
Chris@0 59 }
Chris@0 60 elseif ($title = $route->getDefault('_title')) {
Chris@0 61 $options = [];
Chris@0 62 if ($context = $route->getDefault('_title_context')) {
Chris@0 63 $options['context'] = $context;
Chris@0 64 }
Chris@0 65 $args = [];
Chris@0 66 if (($raw_parameters = $request->attributes->get('_raw_variables'))) {
Chris@0 67 foreach ($raw_parameters->all() as $key => $value) {
Chris@0 68 $args['@' . $key] = $value;
Chris@0 69 $args['%' . $key] = $value;
Chris@0 70 }
Chris@0 71 }
Chris@0 72 if ($title_arguments = $route->getDefault('_title_arguments')) {
Chris@0 73 $args = array_merge($args, (array) $title_arguments);
Chris@0 74 }
Chris@0 75
Chris@0 76 // Fall back to a static string from the route.
Chris@0 77 $route_title = $this->t($title, $args, $options);
Chris@0 78 }
Chris@0 79 return $route_title;
Chris@0 80 }
Chris@0 81
Chris@0 82 }