Как получить удобочитаемую метку пакета из загруженного объекта?
Допустим, я хочу получить метку узла связки my_article, которая называется «Моя потрясающая статья»
// Load a node
$node = Drupal::entityManager()->getStorage('node')->load(4);
print $node->bundle(); // prints the machine-readable name. e.g. 'my_article'.
print $node->getEntityType()->getBundleLabel(); // prints 'content type'.
Я могу получить только машиночитаемое имя пакета или метку сущности («тип контента», «термин таксономии» и т. Д.), Но как мне получить метку пакета?
PS Я бы предпочел не использовать устаревшие классы / функции
Обратите внимание, что принятый ответ относится конкретно к объектам узла, но все объекты имеют пакеты. Многие объекты, такие как
user
илиmenu_link_content
(для пользовательских ссылок меню), имеют только один пакет, соответствующий самому типу объекта.entity_type.bundle.info
Сервис, реализуемый Drupal \ ядро \ Entity \ EntityTypeBundleInfo , обеспечивает доступ к информации , сущность расслоения. Его методыgetAllBundleInfo()
иgetBundleInfo($entity_type_id)
возвращают массив, основанный на типе сущности и имени компьютера пакета соответственно, а первый содержит массив пакетов, ключом которого является имя компьютера пакета. У каждого пакета естьlabel
ключ с переведенным дружественным названием пакета.Ниже приведен пример, который показывает разницу между именами компьютеров сущности контента, метками, именами машин комплекта и метками комплекта. Код предполагает, что есть хотя бы одна пользовательская ссылка меню с идентификатором
1
. Также предполагается, что существуетarticle
тип узла (связка), что существует хотя бы один узел с идентификатором1
, и что узел имеет тип узла (связка)article
.Обязательно используйте инъекцию зависимостей возможности в своем коде, а не полагайтесь на статические методы
Drupal
класса.источник
Также работает следующее:
источник
Если вы не уверены в
$entity
типе, это может быть:источник
Не самое эффективное решение, но для полноты картины это работает:
или
источник