X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fcore%2Flib%2FDrupal%2FCore%2FMenu%2FLocalActionManager.php;fp=web%2Fcore%2Flib%2FDrupal%2FCore%2FMenu%2FLocalActionManager.php;h=a95f445dada24fecfda925e9c4fce422736de045;hp=f262d4724d7bba93cf682b723bca27febfd01cac;hb=0bf8d09d2542548982e81a441b1f16e75873a04f;hpb=74df008bdbb3a11eeea356744f39b802369bda3c diff --git a/web/core/lib/Drupal/Core/Menu/LocalActionManager.php b/web/core/lib/Drupal/Core/Menu/LocalActionManager.php index f262d4724..a95f445da 100644 --- a/web/core/lib/Drupal/Core/Menu/LocalActionManager.php +++ b/web/core/lib/Drupal/Core/Menu/LocalActionManager.php @@ -5,6 +5,7 @@ namespace Drupal\Core\Menu; use Drupal\Core\Access\AccessManagerInterface; use Drupal\Core\Cache\CacheableMetadata; use Drupal\Core\Cache\CacheBackendInterface; +use Drupal\Core\Controller\ControllerResolverInterface; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Plugin\DefaultPluginManager; @@ -15,7 +16,7 @@ use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Routing\RouteProviderInterface; use Drupal\Core\Url; use Symfony\Component\HttpFoundation\RequestStack; -use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface; +use Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface; use Drupal\Core\Session\AccountInterface; /** @@ -47,10 +48,25 @@ class LocalActionManager extends DefaultPluginManager implements LocalActionMana 'class' => 'Drupal\Core\Menu\LocalActionDefault', ]; + /** + * An argument resolver object. + * + * @var \Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface + */ + protected $argumentResolver; + /** * A controller resolver object. * * @var \Symfony\Component\HttpKernel\Controller\ControllerResolverInterface + * + * @deprecated + * Using the 'controller_resolver' service as the first argument is + * deprecated, use the 'http_kernel.controller.argument_resolver' instead. + * If your subclass requires the 'controller_resolver' service add it as an + * additional argument. + * + * @see https://www.drupal.org/node/2959408 */ protected $controllerResolver; @@ -99,8 +115,8 @@ class LocalActionManager extends DefaultPluginManager implements LocalActionMana /** * Constructs a LocalActionManager object. * - * @param \Symfony\Component\HttpKernel\Controller\ControllerResolverInterface $controller_resolver - * An object to use in introspecting route methods. + * @param \Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface $argument_resolver + * An object to use in resolving route arguments. * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack * The request stack. * @param \Drupal\Core\Routing\RouteMatchInterface $route_match @@ -118,11 +134,15 @@ class LocalActionManager extends DefaultPluginManager implements LocalActionMana * @param \Drupal\Core\Session\AccountInterface $account * The current user. */ - public function __construct(ControllerResolverInterface $controller_resolver, RequestStack $request_stack, RouteMatchInterface $route_match, RouteProviderInterface $route_provider, ModuleHandlerInterface $module_handler, CacheBackendInterface $cache_backend, LanguageManagerInterface $language_manager, AccessManagerInterface $access_manager, AccountInterface $account) { + public function __construct(ArgumentResolverInterface $argument_resolver, RequestStack $request_stack, RouteMatchInterface $route_match, RouteProviderInterface $route_provider, ModuleHandlerInterface $module_handler, CacheBackendInterface $cache_backend, LanguageManagerInterface $language_manager, AccessManagerInterface $access_manager, AccountInterface $account) { // Skip calling the parent constructor, since that assumes annotation-based // discovery. $this->factory = new ContainerFactory($this, 'Drupal\Core\Menu\LocalActionInterface'); - $this->controllerResolver = $controller_resolver; + $this->argumentResolver = $argument_resolver; + if ($argument_resolver instanceof ControllerResolverInterface) { + @trigger_error("Using the 'controller_resolver' service as the first argument is deprecated, use the 'http_kernel.controller.argument_resolver' instead. If your subclass requires the 'controller_resolver' service add it as an additional argument. See https://www.drupal.org/node/2959408.", E_USER_DEPRECATED); + $this->controllerResolver = $argument_resolver; + } $this->requestStack = $request_stack; $this->routeMatch = $route_match; $this->routeProvider = $route_provider; @@ -150,7 +170,7 @@ class LocalActionManager extends DefaultPluginManager implements LocalActionMana */ public function getTitle(LocalActionInterface $local_action) { $controller = [$local_action, 'getTitle']; - $arguments = $this->controllerResolver->getArguments($this->requestStack->getCurrentRequest(), $controller); + $arguments = $this->argumentResolver->getArguments($this->requestStack->getCurrentRequest(), $controller); return call_user_func_array($controller, $arguments); } @@ -176,9 +196,10 @@ class LocalActionManager extends DefaultPluginManager implements LocalActionMana } } $links = []; + $cacheability = new CacheableMetadata(); + $cacheability->addCacheContexts(['route']); /** @var $plugin \Drupal\Core\Menu\LocalActionInterface */ foreach ($this->instances[$route_appears] as $plugin_id => $plugin) { - $cacheability = new CacheableMetadata(); $route_name = $plugin->getRouteName(); $route_parameters = $plugin->getRouteParameters($this->routeMatch); $access = $this->accessManager->checkNamedRoute($route_name, $route_parameters, $this->account, TRUE); @@ -193,9 +214,8 @@ class LocalActionManager extends DefaultPluginManager implements LocalActionMana '#weight' => $plugin->getWeight(), ]; $cacheability->addCacheableDependency($access)->addCacheableDependency($plugin); - $cacheability->applyTo($links[$plugin_id]); } - $links['#cache']['contexts'][] = 'route'; + $cacheability->applyTo($links); return $links; }