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 FieldItemListInterfaceSie ü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_idgültig, aber $node->some_er_field->valuenicht. Nun können Sie die fragen , FieldItemInterfacewie so $node->title->get(0)->getProperties(). Alternativ können Sie den Datentyp des Felds kennen und dessen propertyDefinitionsMethode ü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 FieldItemInterfacetatsächlich ein EntityReferenceItem ist und Sie es überprüfen können:: propertyDefinitions () -Methode, um zu sehen, welche Eigenschaften definiert sind.
Nun haben Sie ein TypedDataInterfaceObjekt. Wie erhalten Sie dessen Wert? Nun, Sie verwenden seine ::getValue()Methode.
Aber warten Sie, warum tut $node->title->valueArbeit - ich habe nicht zu schreiben $node->title->get(0)->get('value')->getValue()- auch das ist , weil wir mit PHP magische Methoden auf FieldItemListInterfaceund FieldItemInterfaceso , dass $node->title->valueAnrufe $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_idund $node->moderation_state->entitywü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.