Erstens einige Hintergrundinformationen.
Wenn Sie eingeben, erhalten$node->something
Sie ein FieldItemListInterface . Woher wissen Sie, für welche Werte Sie verwenden können something
? Nun, Sie können die Entität fragen.
$node->getFieldDefinitions()
Jetzt haben Sie ein, das FieldItemListInterface
Sie über seine Werte iterieren können, oder im Fall eines Felds mit einem Wert nur das erste. Selbst wenn Sie verwenden $node->title
, ist der Titel ein Titel FieldItemListInterface
, obwohl Sie nur ein Element in der Liste erwarten würden.
Lassen Sie uns also den ersten Wert in der Liste erhalten. $node->something->get(0)
. Dadurch erhalten Sie ein FieldItemInterface . Von hier aus können Sie auf die Eigenschaften des Feldelements zugreifen. ZB $node->title->get(0)->get('value')
. Jedes davon ist eine Instanz von TypedDataInterface . Aber wie Sie wissen, was Sie verwenden können value
. ZB Für eine Entität ist das Referenzfeld $node->some_er_field->target_id
gültig, aber $node->some_er_field->value
nicht. Nun können Sie die fragen , FieldItemInterface
wie so $node->title->get(0)->getProperties()
. Alternativ können Sie den Datentyp des Felds kennen und dessen propertyDefinitions
Methode überprüfen . Im Fall des Felds moderation_state wird beispielsweise ein Entity Reference-Feld verwendet, um den Verweis auf die Konfigurationsentität moderation state zu verfolgen. Das bedeutet also, dass jedes FieldItemInterface
tatsächlich ein EntityReferenceItem ist und Sie es überprüfen können:: propertyDefinitions () -Methode, um zu sehen, welche Eigenschaften definiert sind.
Nun haben Sie ein TypedDataInterface
Objekt. Wie erhalten Sie dessen Wert? Nun, Sie verwenden seine ::getValue()
Methode.
Aber warten Sie, warum tut $node->title->value
Arbeit - ich habe nicht zu schreiben $node->title->get(0)->get('value')->getValue()
- auch das ist , weil wir mit PHP magische Methoden auf FieldItemListInterface
und FieldItemInterface
so , dass $node->title->value
Anrufe $node->title->get(0)->get('value')->getValue()
für Sie.
Also zusammenfassend:
$node->moderation_state->get(0)->get('target_id')->getValue()
gibt Ihnen die ID der Konfigurationsentität für den Moderationsstatus.
$node->moderation_state->get(0)->get('entity')->getValue()
gibt Ihnen die Konfigurationsentität ModerationState, sodass Sie ihre Methoden direkt verwenden können - wie ::isPublished()
und ::label()
.
$node->moderation_state->target_id
und $node->moderation_state->entity
würde jeweils das gleiche erreichen.
Ich habe ein Blitzgespräch für meine Kollegen darüber geführt. Wenn Sie interessiert sind, dass die Folien hier sind, hat die Aufnahme leider nicht funktioniert.