Зауважте, що прийнята відповідь застосовується спеціально до об'єктів вузлів, але всі сутності мають пакети. Багато об'єктів, як-от 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
класу.