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 }
|