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@17: $route_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@17: // run, and the route parameters have been upcast. The original values can Chris@17: // be retrieved from the raw parameters. For example, if the route's path is Chris@0: // /filter/tips/{filter_format} and the path is /filter/tips/plain_text then Chris@17: // $raw_parameters->get('filter_format') == 'plain_text'. Parameters that Chris@17: // are not represented in the route path as slugs might be added by a route Chris@17: // enhancer and will not be present in the raw parameters. Chris@17: $raw_parameters = $route_match->getRawParameters(); Chris@17: $parameters = $route_match->getParameters(); Chris@0: Chris@0: foreach ($variables as $name) { Chris@17: if (isset($route_parameters[$name])) { Chris@0: continue; Chris@0: } Chris@0: Chris@17: if ($raw_parameters->has($name)) { Chris@17: $route_parameters[$name] = $raw_parameters->get($name); Chris@0: } Chris@17: elseif ($parameters->has($name)) { Chris@17: $route_parameters[$name] = $parameters->get($name); Chris@0: } Chris@0: } Chris@17: 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@17: return $route_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: }