¿Cómo obtengo la etiqueta legible para humanos de un paquete de una entidad cargada?
Digamos que quiero obtener la etiqueta de un nodo del paquete my_article, que es "Mi increíble artículo"
// 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'.
Solo puedo obtener el nombre legible por máquina del paquete o la etiqueta de entidad ("tipo de contenido", "término de taxonomía", etc.), pero ¿cómo obtengo la etiqueta del paquete?
PD: Preferiría que no use clases / funciones obsoletas
Tenga en cuenta que la respuesta aceptada se aplica específicamente a las entidades de nodo, pero todas las entidades tienen paquetes. Muchas entidades, como
user
omenu_link_content
(para enlaces de menú personalizados), solo tienen un paquete que corresponde al tipo de entidad en sí.El
entity_type.bundle.info
servicio, implementado por Drupal \ Core \ Entity \ EntityTypeBundleInfo , proporciona acceso a la información del paquete de entidades. Sus métodosgetAllBundleInfo()
ygetBundleInfo($entity_type_id)
devolver una matriz con clave por tipo de entidad y nombre de máquina de paquete respectivamente, con el primero que contiene una matriz de paquetes con clave por nombre de máquina de paquete. Cada paquete tiene unalabel
clave con el nombre descriptivo del paquete traducido.A continuación se muestra un ejemplo que muestra la diferencia entre los nombres de máquina de entidad de contenido, etiquetas, nombres de máquina de paquete y etiquetas de paquete. El código supone que hay al menos un enlace de menú personalizado con una ID de
1
. También supone que hay unarticle
tipo de nodo (paquete), que hay al menos un nodo con un ID de1
, y que el nodo es del tipo de nodo (paquete)article
.Asegúrese de utilizar la inyección de dependencia siempre que sea posible en su código en lugar de confiar en los métodos estáticos de la
Drupal
clase.fuente
Lo siguiente también funciona:
fuente
Si no está seguro del
$entity
tipo, puede ser:fuente
No es la solución más eficiente, pero en aras de la integridad, esto funciona:
o
fuente