Observe que a resposta aceita se aplica especificamente às entidades do nó, mas todas as entidades possuem pacotes configuráveis. Muitas entidades, como user
ou menu_link_content
(para links de menu personalizados), possuem apenas um pacote que corresponde ao próprio tipo de entidade.
O entity_type.bundle.info
serviço, implementado por Drupal \ Core \ Entity \ EntityTypeBundleInfo , fornece acesso às informações do pacote de entidades. Seus métodos getAllBundleInfo()
e getBundleInfo($entity_type_id)
retornam uma matriz codificada por tipo de entidade e nome da máquina de pacote configurável, respectivamente, com o primeiro contendo uma matriz de pacotes configurados por nome da máquina de pacote configurável. Cada pacote configurável possui uma label
chave com o nome amigável do pacote traduzido.
Abaixo está um exemplo que mostra a diferença entre nomes de máquinas de entidades de conteúdo, rótulos, nomes de máquinas de pacote configurável e rótulos de pacote configurável. O código supõe que haja pelo menos um link de menu personalizado com um ID de 1
. Ele também supõe que existe um article
tipo de nó (pacote configurável), que existe pelo menos um nó com um ID de 1
e que o nó é do tipo nó (pacote configurável) 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;
Certifique-se de usar injeção de dependência sempre que possível em seu código, em vez de confiar nos métodos estáticos da Drupal
classe.