Lưu ý rằng câu trả lời được chấp nhận áp dụng cụ thể cho các thực thể nút nhưng tất cả các thực thể đều có gói. Nhiều thực thể, như user
hoặc menu_link_content
(đối với các liên kết menu tùy chỉnh), chỉ có một gói tương ứng với chính loại thực thể.
Các entity_type.bundle.info
dịch vụ, thực hiện bởi Drupal \ Lõi \ Entity \ EntityTypeBundleInfo , cung cấp quyền truy cập vào thông tin gói thực thể. Các phương thức của nó getAllBundleInfo()
và getBundleInfo($entity_type_id)
trả về một mảng được khóa theo loại thực thể và tên máy bó, tương ứng với một mảng sau đó chứa một mảng các khóa được khóa bởi tên máy bó. Mỗi gói có một label
khóa với tên thân thiện với gói được dịch.
Dưới đây là một ví dụ cho thấy sự khác biệt giữa tên máy thực thể nội dung, nhãn, tên máy bó và nhãn bó. Mã này giả định rằng có ít nhất một liên kết menu tùy chỉnh với ID là 1
. Nó cũng giả sử có một article
loại nút (bó), có ít nhất một nút có ID 1
và nút đó thuộc loại nút (bó) 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;
Hãy chắc chắn sử dụng phép nội xạ phụ thuộc nếu có thể trong mã của bạn thay vì dựa vào các phương thức tĩnh của Drupal
lớp.