Uważam, że największym problemem w pracy z Drupalem 8 jest to, że nie mogę uzyskać potrzebnych danych. Drupal 8 chce, żebym używał publicznych metod zamiast ręcznego drążenia obiektu. Problem polega na tym, że nie mogę znaleźć spójnego sposobu na uzyskanie listy dostępnych metod! (istnieją magicznie i wydaje mi się, że powinienem o nich wiedzieć)
W tym przykładzie załóżmy, że mam typ zawartości z polem wideo. Muszę uzyskać nieprzetworzony adres URL pliku wideo w tym polu.
Zacznę więc od identyfikatora węzła ($ nid) i jakoś muszę wymyślić, jak załadować węzeł. Nie jest tak źle, ponieważ jest wiele przykładów. Więc robię coś takiego $node = \Drupal\node\Entity\Node::load($nid);
.
Na razie w porządku. Następnie muszę uzyskać wartość mojego pola wideo (field_main_video). Zajęło mi to ZAWSZE rozszyfrowanie, ponieważ wokół sieci istnieje sprzeczna dokumentacja. W końcu pomyślałem, że muszę zrobić coś takiego (ponieważ jest to element wielowartościowy):
$video = \Drupal\node\Entity\Node::load($nid)->field_main_video->getValue();
... a potem zapętlić tablicę itp. Użycie kinta również mi nie pomogło. Ponieważ na przykład, jeśli szukam kint($node)
metod, nie widzę w tym getValue () elementu. Nadal nie jest straszny, ponieważ było wystarczająco dużo przykładów, aby to rozgryźć.
Kiedy jednak wchodziłem głębiej, nie wiedziałem (to jest ważna część), że zamiast uzyskać identyfikator encji pola wideo, a następnie załadować encję, a następnie znaleźć pole „uri” w encji itp. (Np. Chciałbym w D7): Była metoda, która pozwala mi uzyskać URI wszystko w tym samym wierszu kodu!
$url = \Drupal\node\Entity\Node::load($nid)->field_main_video->entity->getFileUri();
Ale skąd mogłem wiedzieć, że istnieje metoda getFileUri ()? Zdarzyło mi się natknąć na to w poście na blogu. To naprawdę sprawia, że uzyskanie URI jest łatwiejsze niż w D7 ... ale tylko wtedy, gdy wiesz (magicznie), jakie metody istnieją dla każdego 'poziomu' obiektu.
Na koniec w tym przykładzie pytam: Jak znaleźć wszystkie publiczne metody dla każdego poziomu obiektu w sposób łatwy do odczytania i zrozumienia? Zauważ, że wydaje się, że powinien istnieć sposób na drupal-centryczny (tj. Moduł programistyczny), zamiast ręcznego przeszukiwania api.drupal.org lub używania czegoś specyficznego dla IDE?