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