entityTypeManager = $entity_type_manager; $this->languageManager = $language_manager; $this->moduleHandler = $module_handler; $this->typedDataManager = $typed_data_manager; $this->cacheBackend = $cache_backend; } /** * {@inheritdoc} */ public function getBundleInfo($entity_type_id) { $bundle_info = $this->getAllBundleInfo(); return $bundle_info[$entity_type_id] ?? []; } /** * {@inheritdoc} */ public function getAllBundleInfo() { if (empty($this->bundleInfo)) { $langcode = $this->languageManager->getCurrentLanguage()->getId(); if ($cache = $this->cacheGet("entity_bundle_info:$langcode")) { $this->bundleInfo = $cache->data; } else { $this->bundleInfo = $this->moduleHandler->invokeAll('entity_bundle_info'); foreach ($this->entityTypeManager->getDefinitions() as $type => $entity_type) { // First look for entity types that act as bundles for others, load them // and add them as bundles. if ($bundle_entity_type = $entity_type->getBundleEntityType()) { foreach ($this->entityTypeManager->getStorage($bundle_entity_type)->loadMultiple() as $entity) { $this->bundleInfo[$type][$entity->id()]['label'] = $entity->label(); } } // If entity type bundles are not supported and // hook_entity_bundle_info() has not already set up bundle // information, use the entity type name and label. elseif (!isset($this->bundleInfo[$type])) { $this->bundleInfo[$type][$type]['label'] = $entity_type->getLabel(); } } $this->moduleHandler->alter('entity_bundle_info', $this->bundleInfo); $this->cacheSet("entity_bundle_info:$langcode", $this->bundleInfo, Cache::PERMANENT, ['entity_types', 'entity_bundles']); } } return $this->bundleInfo; } /** * {@inheritdoc} */ public function clearCachedBundles() { $this->bundleInfo = []; Cache::invalidateTags(['entity_bundles']); // Entity bundles are exposed as data types, clear that cache too. $this->typedDataManager->clearCachedDefinitions(); } }