Przenoszę moduł z Drupal 7 na Drupal 8. W ustawieniach konfiguracyjnych tego modułu muszę uzyskać listę aktualnie istniejących typów pól.
W Drupal 7 zostało to osiągnięte za pomocą field_info_field_types()
funkcji.
W Drupal 8 (8.0.0-rc3) pojawia się błąd „funkcja nie istnieje”, pomimo informacji podanych na stronie pomocy interfejsu API Drupal , wyraźnie nieaktualne.
Następnie sprawdzając, znalazłem stronę DrupalContrib , na której funkcja jest uznana za przestarzałą, i proponuje teraz jej użycie Drupal::service('plugin.manager.entity.field.field_type')->getDefinitions()
.
Ale użycie go powoduje kolejny błąd „Nieznana usługa plugin.manager.entity.field.field_type”, na szczęście powiązany z sugestią „Czy masz na myśli typ plugin.manager.field.field_field?”
Więc spróbowałem użyć Drupal::service('plugin.manager.field.field_type')->getDefinitions()
i wow: Mam oczekiwaną tablicę typów pól.
Ale każdy element tablicy (jeden typ pola) jest teraz obiektem (zamiast tablicy potomnej), a dane, których szukam, są zagnieżdżone w chronionych właściwościach, więc nie mam do nich dostępu.
Na tym etapie utknąłem. Pomyślałem, że może istnieć jakaś klasa, którą mógłbym rozwinąć, aby poruszać się po tych danych, ale bez powodzenia: w szczególności nie mogłem nawet stwierdzić, który jest komponentem w Drupal 8, w którym definicje typów pól są scentralizowane.