diff -u b/menu_breadcrumb.services.yml b/menu_breadcrumb.services.yml --- b/menu_breadcrumb.services.yml +++ b/menu_breadcrumb.services.yml @@ -1,7 +1,7 @@ services: menu_breadcrumb.breadcrumb.default: class: Drupal\menu_breadcrumb\MenuBasedBreadcrumbBuilder - arguments: ['@config.factory', '@plugin.manager.menu.link', '@router.admin_context', '@title_resolver', '@request_stack', '@language_manager', '@entity_type.manager'] + arguments: ['@config.factory', '@plugin.manager.menu.link', '@router.admin_context', '@title_resolver', '@request_stack', '@language_manager', '@entity_type.manager', '@cache.menu', '@lock'] tags: # The priority must be higher than core taxonomy builder (priority: 1002) # see https://www.drupal.org/node/1495510 diff -u b/src/MenuBasedBreadcrumbBuilder.php b/src/MenuBasedBreadcrumbBuilder.php --- b/src/MenuBasedBreadcrumbBuilder.php +++ b/src/MenuBasedBreadcrumbBuilder.php @@ -5,6 +5,7 @@ use Drupal\Component\Utility\SortArray; use Drupal\Core\Breadcrumb\Breadcrumb; use Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface; +use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Controller\TitleResolverInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; @@ -13,6 +14,8 @@ use Drupal\Core\Language\LanguageInterface; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Link; +use Drupal\Core\Lock\LockBackendInterface; +use Drupal\Core\Menu\MenuActiveTrail; use Drupal\Core\Menu\MenuActiveTrailInterface; use Drupal\Core\Menu\MenuLinkManagerInterface; use Drupal\Core\Routing\AdminContext; @@ -79,4 +82,18 @@ /** + * The caching backend. + * + * @var \Drupal\Core\Cache\CacheBackendInterface + */ + protected $cacheMenu; + + /** + * The locking backend. + * + * @var \Drupal\Core\Lock\LockBackendInterface + */ + protected $lock; + + /** * The Menu Breadcrumbs configuration. * @@ -122,16 +139,19 @@ TitleResolverInterface $title_resolver, RequestStack $request_stack, LanguageManagerInterface $language_manager, - EntityTypeManagerInterface $entity_type_manager + EntityTypeManagerInterface $entity_type_manager, + CacheBackendInterface $cache_menu, + LockBackendInterface $lock ) { $this->configFactory = $config_factory; - $this->menuActiveTrail = $menu_active_trail; $this->menuLinkManager = $menu_link_manager; $this->adminContext = $admin_context; $this->titleResolver = $title_resolver; $this->currentRequest = $request_stack->getCurrentRequest(); $this->languageManager = $language_manager; $this->entityTypeManager = $entity_type_manager; + $this->cacheMenu = $cache_menu; + $this->lock = $lock; $this->config = $this->configFactory->get('menu_breadcrumb.settings'); } @@ -194,9 +214,9 @@ } } - // Construct a MenuActiveTrail entity which is aware of the - // given routeMatch and not the current global one. - $menuActiveTrail = new MenuActiveTrail(\Drupal::service('plugin.manager.menu.link'), $route_match, \Drupal::service('cache.menu'), \Drupal::service('lock')); + // Do not use the global MenuActiveTrail service because we need one + // which is aware of the given routeMatch, not of the global one. + $menuActiveTrail = new MenuActiveTrail($this->menuLinkManager, $route_match, $this->cacheMenu, $this->lock); $trail_ids = $menuActiveTrail->getActiveTrailIds($menu_name); $trail_ids = array_filter($trail_ids); if ($trail_ids) {