Обратите внимание, что принятый ответ относится конкретно к объектам узла, но все объекты имеют пакеты. Многие объекты, такие как user
или menu_link_content
(для пользовательских ссылок меню), имеют только один пакет, соответствующий самому типу объекта.
entity_type.bundle.info
Сервис, реализуемый Drupal \ ядро \ Entity \ EntityTypeBundleInfo , обеспечивает доступ к информации , сущность расслоения. Его методы getAllBundleInfo()
и getBundleInfo($entity_type_id)
возвращают массив, основанный на типе сущности и имени компьютера пакета соответственно, а первый содержит массив пакетов, ключом которого является имя компьютера пакета. У каждого пакета есть label
ключ с переведенным дружественным названием пакета.
Ниже приведен пример, который показывает разницу между именами компьютеров сущности контента, метками, именами машин комплекта и метками комплекта. Код предполагает, что есть хотя бы одна пользовательская ссылка меню с идентификатором1
. Также предполагается, что существует article
тип узла (связка), что существует хотя бы один узел с идентификатором 1
, и что узел имеет тип узла (связка) article
.
<?php
$entity_type_manager = \Drupal::entityTypeManager();
$bundle_info = \Drupal::service("entity_type.bundle.info")->getAllBundleInfo();
$current_user = \Drupal::currentUser()->getAccount();
// Prints "user".
print $current_user->getEntityTypeId() . PHP_EOL;
// Prints "User".
print $current_user->getEntityType()->getLabel() . PHP_EOL;
// Prints "user".
print $current_user->bundle() . PHP_EOL;
// Prints "User".
print $bundle_info[$current_user->getEntityTypeId()][$current_user->bundle()]['label'] . PHP_EOL;
$my_menu_link = $entity_type_manager->getStorage('menu_link_content')->load(1);
// Prints "menu_link_content".
print $my_menu_link->getEntityTypeId() . PHP_EOL;
// Prints "Custom menu link".
print $my_menu_link->getEntityType()->getLabel() . PHP_EOL;
// Prints "menu_link_content".
print $my_menu_link->bundle() . PHP_EOL;
// Prints "Custom menu link".
print $bundle_info[$my_menu_link->getEntityTypeId()][$my_menu_link->bundle()]['label'] . PHP_EOL;
$my_article = $entity_type_manager->getStorage('node')->load(1);
// Prints "node".
print $my_article->getEntityTypeId() . PHP_EOL;
// Prints "Content".
print $my_article->getEntityType()->getLabel() . PHP_EOL;
// Prints "article".
print $my_article->bundle() . PHP_EOL;
// Prints "Article".
print $bundle_info[$my_article->getEntityTypeId()][$my_article->bundle()]['label'] . PHP_EOL;
Обязательно используйте инъекцию зависимостей возможности в своем коде, а не полагайтесь на статические методы Drupal
класса.