Ich stelle fest, dass das größte Problem bei der Arbeit mit Drupal 8 darin besteht, dass ich nicht die Daten erhalten kann, die ich benötige. Drupal 8 möchte, dass ich öffentliche Methoden verwende, anstatt manuell durch ein Objekt zu bohren. Das Problem ist, ich kann keinen konsistenten Weg finden, um eine Liste der verfügbaren Methoden zu erhalten! (Sie existieren auf magische Weise und ich habe das Gefühl, ich sollte nur etwas über sie wissen.) =
Angenommen, ich habe einen Inhaltstyp mit einem Videofeld. Ich muss die unformatierte URL der Videodatei in diesem Feld abrufen.
Also würde ich mit einer Knoten-ID ($ nid) beginnen und irgendwie muss ich herausfinden, wie der Knoten geladen wird. Das ist nicht schlecht, denn es gibt viele Beispiele. Also mache ich so etwas $node = \Drupal\node\Entity\Node::load($nid);
.
So weit, ist es gut. Dann muss ich den Wert meines Videofeldes (field_main_video) abrufen. Ich brauchte für immer, um das herauszufinden, weil es im Internet widersprüchliche Dokumentationen gibt. Schließlich habe ich herausgefunden, dass ich so etwas tun muss (weil es ein mehrwertiger Gegenstand ist):
$video = \Drupal\node\Entity\Node::load($nid)->field_main_video->getValue();
... dann Schleife durch das Array usw. Die Verwendung von kint hat mir auch nicht geholfen, dies zu finden. Wenn ich zum Beispiel kint($node)
unter Methoden nachschaue, sehe ich dort getValue () nicht als Element. Immer noch nicht schrecklich, denn es gab genug Beispiele, um es herauszufinden.
Als ich jedoch tiefer ging, wusste ich nicht (dies ist der wichtige Teil), dass ich nicht die Entitäts-ID des Videofelds abrufen, dann die Entität laden und dann das "uri" -Feld in der Entität usw. finden sollte (wie z Ich würde in D7): Es gab eine Methode, mit der ich den URI alle in derselben Codezeile erhalten kann!
$url = \Drupal\node\Entity\Node::load($nid)->field_main_video->entity->getFileUri();
Aber wie hätte ich wissen können, dass getFileUri () existiert? Ich bin zufällig in einem Blog-Beitrag darauf gestoßen. Dies macht es wirklich einfacher, eine URI zu erhalten als in D7 ... aber nur, wenn Sie (auf magische Weise) wissen, welche Methoden für jede 'Ebene' eines Objekts existieren.
Am Ende frage ich mit diesem Beispiel: Wie finden Sie alle öffentlichen Methoden für jede Ebene eines Objekts auf eine Weise, die leicht zu lesen und zu verstehen ist? Beachten Sie, dass es anscheinend eine drupal-zentrierte (dh Entwicklungsmodul) Methode geben sollte, um dies zu tun, anstatt api.drupal.org manuell zu durchsuchen oder etwas IDE-spezifisches zu verwenden?