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
o menu_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étodos getAllBundleInfo()
y getBundleInfo($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 una label
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 un article
tipo de nodo (paquete), que hay al menos un nodo con un ID de 1
, y que el nodo es del tipo de nodo (paquete) 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;
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.