Jak uzyskać czytelną dla człowieka etykietę pakietu od załadowanej jednostki.
Powiedzmy, że chcę uzyskać etykietę węzła pakietu my_article, który brzmi „Mój wspaniały artykuł”
// Load a node
$node = Drupal::entityManager()->getStorage('node')->load(4);
print $node->bundle(); // prints the machine-readable name. e.g. 'my_article'.
print $node->getEntityType()->getBundleLabel(); // prints 'content type'.
Jestem w stanie uzyskać nazwę pakietu do odczytu maszynowego lub etykietę encji („typ zawartości”, „termin systematyki” itp.), Ale jak mogę uzyskać etykietę pakietu?
PS Wolałbym nie używać przestarzałych klas / funkcji
Zauważ, że zaakceptowana odpowiedź dotyczy konkretnie węzłów, ale wszystkie podmioty mają pakiety. Wiele encji, takich jak
user
lubmenu_link_content
(dla niestandardowych łączy menu), ma tylko jeden pakiet, który odpowiada samemu typowi encji.entity_type.bundle.info
Usługi, realizowane przez Drupala podstawowej \ \ Entity \ EntityTypeBundleInfo , zapewnia dostęp do informacji jednostka wiązki. Jego metodygetAllBundleInfo()
igetBundleInfo($entity_type_id)
zwracana jest tablica wpisywana odpowiednio według typu jednostki i nazwy maszyny pakującej, przy czym ta pierwsza zawiera tablicę pakietów kluczowanych według nazwy maszyny pakującej. Każdy pakiet malabel
klucz z przetłumaczoną przyjazną nazwą pakietu.Poniżej znajduje się przykład pokazujący różnicę między nazwami komputerów encji treści, etykietami, nazwami maszyn pakujących i etykietami pakietów. Kod zakłada, że istnieje co najmniej jedno niestandardowe łącze menu o identyfikatorze
1
. Zakłada również, że istniejearticle
typ węzła (pakiet), że istnieje co najmniej jeden węzeł o identyfikatorze1
i że węzeł jest typu węzła (pakiet)article
.Pamiętaj, aby w kodzie używać wstrzykiwania zależności, zamiast polegać na statycznych metodach
Drupal
klasy.źródło
Działa również:
źródło
Jeśli nie masz pewności co do
$entity
typu, może to być:źródło
Nie jest to najbardziej wydajne rozwiązanie, ale dla kompletności działa to:
lub
źródło