请注意,接受的答案专门适用于节点实体,但是所有实体都有捆绑。许多实体,例如user
或menu_link_content
(对于自定义菜单链接),只有一个捆绑包,与实体类型本身相对应。
entity_type.bundle.info
由Drupal \ Core \ Entity \ EntityTypeBundleInfo实现的服务提供对实体捆绑包信息的访问。它的方法getAllBundleInfo()
和分别getBundleInfo($entity_type_id)
返回一个以实体类型和捆绑计算机名称为键的数组,其中前者包含一个以捆绑计算机名称作为键的捆绑数组。每个捆绑软件都有一个label
带有翻译后的捆绑软件友好名称的密钥。
下面的示例显示了内容实体机器名称,标签,捆绑计算机名称和捆绑标签之间的区别。该代码假定至少有一个ID为的自定义菜单链接1
。它还假定存在一个article
节点类型(捆绑),至少有一个ID为1
的节点,并且该节点属于节点类型(捆绑)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;
确保在代码中尽可能使用依赖项注入,而不要依赖Drupal
类的静态方法。