Perhatikan bahwa jawaban yang diterima berlaku khusus untuk entitas simpul tetapi semua entitas memiliki bundel. Banyak entitas, seperti user
atau menu_link_content
(untuk tautan menu khusus), hanya memiliki satu bundel yang sesuai dengan jenis entitas itu sendiri.
The entity_type.bundle.info
layanan, dilaksanakan oleh Drupal \ Inti \ Entity \ EntityTypeBundleInfo , menyediakan akses ke informasi entitas bundel. Metode-metodenya getAllBundleInfo()
dan getBundleInfo($entity_type_id)
mengembalikan array yang diketik berdasarkan jenis entitas dan nama mesin bundel masing-masing, dengan yang sebelumnya berisi array bundel yang dikunci dengan nama mesin bundel. Setiap bundel memiliki label
kunci dengan nama ramah bundel yang diterjemahkan.
Di bawah ini adalah contoh yang menunjukkan perbedaan antara nama mesin entitas konten, label, nama mesin bundel, dan label bundel. Kode ini mengasumsikan bahwa setidaknya ada satu tautan menu khusus dengan ID dari 1
. Ini juga mengasumsikan ada article
tipe simpul (bundel), bahwa setidaknya ada satu simpul dengan ID 1
, dan bahwa simpul tersebut adalah tipe simpul (bundel) 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;
Pastikan untuk menggunakan injeksi dependensi jika memungkinkan dalam kode Anda daripada mengandalkan metode statis Drupal
kelas.