123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- <?php
- namespace Drupal\Core\Menu;
- use Drupal\Component\Plugin\PluginBase;
- use Drupal\Core\Cache\Cache;
- use Drupal\Core\Cache\CacheableDependencyInterface;
- use Drupal\Core\DependencyInjection\DependencySerializationTrait;
- use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
- use Drupal\Core\Routing\RouteMatchInterface;
- use Drupal\Core\Routing\RouteProviderInterface;
- use Symfony\Component\DependencyInjection\ContainerInterface;
- use Symfony\Component\HttpFoundation\Request;
- /**
- * Provides a default implementation for local action plugins.
- */
- class LocalActionDefault extends PluginBase implements LocalActionInterface, ContainerFactoryPluginInterface, CacheableDependencyInterface {
- use DependencySerializationTrait;
- /**
- * The route provider to load routes by name.
- *
- * @var \Drupal\Core\Routing\RouteProviderInterface
- */
- protected $routeProvider;
- /**
- * Constructs a LocalActionDefault object.
- *
- * @param array $configuration
- * A configuration array containing information about the plugin instance.
- * @param string $plugin_id
- * The plugin_id for the plugin instance.
- * @param mixed $plugin_definition
- * The plugin implementation definition.
- * @param \Drupal\Core\Routing\RouteProviderInterface $route_provider
- * The route provider to load routes by name.
- */
- public function __construct(array $configuration, $plugin_id, $plugin_definition, RouteProviderInterface $route_provider) {
- parent::__construct($configuration, $plugin_id, $plugin_definition);
- $this->routeProvider = $route_provider;
- }
- /**
- * {@inheritdoc}
- */
- public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
- return new static(
- $configuration,
- $plugin_id,
- $plugin_definition,
- $container->get('router.route_provider')
- );
- }
- /**
- * {@inheritdoc}
- */
- public function getRouteName() {
- return $this->pluginDefinition['route_name'];
- }
- /**
- * {@inheritdoc}
- */
- public function getTitle(Request $request = NULL) {
- // Subclasses may pull in the request or specific attributes as parameters.
- // The title from YAML file discovery may be a TranslatableMarkup object.
- return (string) $this->pluginDefinition['title'];
- }
- /**
- * {@inheritdoc}
- */
- public function getWeight() {
- return $this->pluginDefinition['weight'];
- }
- /**
- * {@inheritdoc}
- */
- public function getRouteParameters(RouteMatchInterface $route_match) {
- $parameters = isset($this->pluginDefinition['route_parameters']) ? $this->pluginDefinition['route_parameters'] : [];
- $route = $this->routeProvider->getRouteByName($this->getRouteName());
- $variables = $route->compile()->getVariables();
- // Normally the \Drupal\Core\ParamConverter\ParamConverterManager has
- // processed the Request attributes, and in that case the _raw_variables
- // attribute holds the original path strings keyed to the corresponding
- // slugs in the path patterns. For example, if the route's path pattern is
- // /filter/tips/{filter_format} and the path is /filter/tips/plain_text then
- // $raw_variables->get('filter_format') == 'plain_text'.
- $raw_variables = $route_match->getRawParameters();
- foreach ($variables as $name) {
- if (isset($parameters[$name])) {
- continue;
- }
- if ($raw_variables && $raw_variables->has($name)) {
- $parameters[$name] = $raw_variables->get($name);
- }
- elseif ($value = $route_match->getRawParameter($name)) {
- $parameters[$name] = $value;
- }
- }
- // The UrlGenerator will throw an exception if expected parameters are
- // missing. This method should be overridden if that is possible.
- return $parameters;
- }
- /**
- * {@inheritdoc}
- */
- public function getOptions(RouteMatchInterface $route_match) {
- return (array) $this->pluginDefinition['options'];
- }
- /**
- * {@inheritdoc}
- */
- public function getCacheTags() {
- if (!isset($this->pluginDefinition['cache_tags'])) {
- return [];
- }
- return $this->pluginDefinition['cache_tags'];
- }
- /**
- * {@inheritdoc}
- */
- public function getCacheContexts() {
- if (!isset($this->pluginDefinition['cache_contexts'])) {
- return [];
- }
- return $this->pluginDefinition['cache_contexts'];
- }
- /**
- * {@inheritdoc}
- */
- public function getCacheMaxAge() {
- if (!isset($this->pluginDefinition['cache_max_age'])) {
- return Cache::PERMANENT;
- }
- return $this->pluginDefinition['cache_max_age'];
- }
- }
|