Ich habe verschiedene Ansätze für den Zugriff auf Entitätswerte in der Themenebene gesehen. Der folgende Code ist nur ein einfaches Beispiel mit magischen Methoden. Es wird davon ausgegangen, dass alle Werte festgelegt sind. Wenn ein Teil davon einen NULL-Wert zurückgibt, treten meiner Erfahrung nach Fehler auf.
$value = $node->field_paragraph
->entity->field_media
->entity->field_file
->entity->field_text->value;
Es gibt Methoden wie ->hasField
und ->count()
um Dinge zu überprüfen, und ich habe eine Vielfalt in meinen Themen. Ich kann den Job erledigen, aber manchmal fühlt es sich hässlich an. Ich interessiere mich für die Codierungsmuster, mit denen Entwickler Entitätsreferenzen sicher und elegant durchforsten.
Antworten:
Vorschlag: Erstellen Sie ein Domänenobjekt mit der Logik.
Normalerweise stellen diese Entitäten etwas dar, das zu Ihrer Geschäftsdomäne passt.
In Ihrer Instanz kann der Knoten beispielsweise ein Ereignis sein.
Sie können also ein Domänenobjekt namens modellieren
EventWrapper
.Dann in Ihrem Code:
quelle
Obwohl Sie Absätze normalerweise rekursiv rendern, können Sie eine feste Struktur nicht rekursiv abrufen, indem Sie sie mit foreach-Schleifen neu erstellen:
Dies vermeidet den Zugriff auf leere Felder und kann mehrwertige Felder verarbeiten.
quelle
Um die großartige Antwort um 4k4 zu erweitern, die ein Muster zeigt, das wir häufig verwenden, aber die Existenz des Feldes nicht abdeckt, können Sie eine einfache Klasse erstellen, die nach Larowlans großartiger Antwort strukturiert ist :
und dann
foreach (EntityReferenceItemListHelper::create($paragraph->field_media)->referencedEntities() as $media) {
quelle