Chris@0: routeProvider = $route_provider; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { Chris@0: return new static( Chris@0: $configuration, Chris@0: $plugin_id, Chris@0: $plugin_definition, Chris@0: $container->get('router.route_provider') Chris@0: ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getRouteName() { Chris@0: return $this->pluginDefinition['route_name']; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getTitle(Request $request = NULL) { Chris@0: // Subclasses may pull in the request or specific attributes as parameters. Chris@0: // The title from YAML file discovery may be a TranslatableMarkup object. Chris@0: return (string) $this->pluginDefinition['title']; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getWeight() { Chris@0: return $this->pluginDefinition['weight']; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getRouteParameters(RouteMatchInterface $route_match) { Chris@0: $parameters = isset($this->pluginDefinition['route_parameters']) ? $this->pluginDefinition['route_parameters'] : []; Chris@0: $route = $this->routeProvider->getRouteByName($this->getRouteName()); Chris@0: $variables = $route->compile()->getVariables(); Chris@0: Chris@0: // Normally the \Drupal\Core\ParamConverter\ParamConverterManager has Chris@0: // processed the Request attributes, and in that case the _raw_variables Chris@0: // attribute holds the original path strings keyed to the corresponding Chris@0: // slugs in the path patterns. For example, if the route's path pattern is Chris@0: // /filter/tips/{filter_format} and the path is /filter/tips/plain_text then Chris@0: // $raw_variables->get('filter_format') == 'plain_text'. Chris@0: $raw_variables = $route_match->getRawParameters(); Chris@0: Chris@0: foreach ($variables as $name) { Chris@0: if (isset($parameters[$name])) { Chris@0: continue; Chris@0: } Chris@0: Chris@0: if ($raw_variables && $raw_variables->has($name)) { Chris@0: $parameters[$name] = $raw_variables->get($name); Chris@0: } Chris@0: elseif ($value = $route_match->getRawParameter($name)) { Chris@0: $parameters[$name] = $value; Chris@0: } Chris@0: } Chris@0: // The UrlGenerator will throw an exception if expected parameters are Chris@0: // missing. This method should be overridden if that is possible. Chris@0: return $parameters; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getOptions(RouteMatchInterface $route_match) { Chris@0: return (array) $this->pluginDefinition['options']; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getCacheTags() { Chris@0: if (!isset($this->pluginDefinition['cache_tags'])) { Chris@0: return []; Chris@0: } Chris@0: return $this->pluginDefinition['cache_tags']; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getCacheContexts() { Chris@0: if (!isset($this->pluginDefinition['cache_contexts'])) { Chris@0: return []; Chris@0: } Chris@0: return $this->pluginDefinition['cache_contexts']; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getCacheMaxAge() { Chris@0: if (!isset($this->pluginDefinition['cache_max_age'])) { Chris@0: return Cache::PERMANENT; Chris@0: } Chris@0: return $this->pluginDefinition['cache_max_age']; Chris@0: } Chris@0: Chris@0: }