허용 된 답변은 노드 엔터티에 적용되지만 모든 엔터티에는 번들이 있습니다. user
또는 menu_link_content
(사용자 정의 메뉴 링크의 경우) 와 같은 많은 엔티티 에는 엔티티 유형 자체에 해당하는 하나의 번들 만 있습니다.
entity_type.bundle.info
에 의해 구현 서비스, 드루팔 \ 코어 \ 법인 \ 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
.