Como obtenho o rótulo legível por humanos de um pacote de uma entidade carregada.
Digamos que quero obter o rótulo de um nó do pacote my_article que é "Meu artigo incrível"
// 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'.
Só consigo obter o nome legível por máquina do pacote configurável ou o Rótulo da entidade ("tipo de conteúdo", "termo de taxonomia" etc.), mas como obtenho o rótulo do pacote configurável?
PS: eu preferiria não usar classes / funções obsoletas
Observe que a resposta aceita se aplica especificamente às entidades do nó, mas todas as entidades possuem pacotes configuráveis. Muitas entidades, como
user
oumenu_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étodosgetAllBundleInfo()
egetBundleInfo($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 umalabel
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 umarticle
tipo de nó (pacote configurável), que existe pelo menos um nó com um ID de1
e que o nó é do tipo nó (pacote configurável)article
.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.fonte
O seguinte também funciona:
fonte
Se você não tiver certeza sobre o
$entity
tipo, pode ser:fonte
Não é a solução mais eficiente, mas por uma questão de integridade, isso funciona:
ou
fonte