まず、いくつかの背景。
入力すると$node->something、FieldItemListInterfaceを取得します。どのように使用できる値をどのようにして知るのsomethingですか ええと、エンティティに質問できます。
$node->getFieldDefinitions()
これでFieldItemListInterface、値を反復処理できるようになりました。単一値フィールドの場合は、最初のフィールドのみを反復処理できます。したがって、を使用している場合でも$node->title、タイトルはFieldItemListInterfaceリスト内の1つのアイテムしか期待していない場合でも、
それでは、リストの最初の値を取得してみましょう。$node->something->get(0)。これにより、FieldItemInterfaceが提供されます。ここから、フィールドアイテムのプロパティにアクセスできます。例えば$node->title->get(0)->get('value')。これらはそれぞれTypedDataInterfaceのインスタンスです。しかし、どのように使用できるかをどうやって知るのでしょうvalue。たとえば、エンティティ参照フィールド$node->some_er_field->target_idは有効ですが無効です$node->some_er_field->value。まああなたはそのFieldItemInterfaceように尋ねることができます$node->title->get(0)->getProperties()。または、フィールドのデータ型を確認し、そのpropertyDefinitionsメソッドを調べることもできます。たとえば、moderation_stateフィールドの場合、エンティティ参照フィールドを使用して、モデレーション状態構成エンティティへの参照を追跡します。つまり、それぞれFieldItemInterfaceが実際にはEntityReferenceItemであり、それを確認できます:: propertyDefinitions()メソッドを使用して、定義するプロパティを確認します。
さて、これでTypedDataInterfaceオブジェクトができました。どのようにしてその値を取得しますか?まあその::getValue()方法を使用します。
しかし、ない、なぜ待つ$node->title->value仕事を-私は記述する必要はありません$node->title->get(0)->get('value')->getValue()私たちが使用しているので、井戸のthats - PHPのマジックメソッドを上FieldItemListInterfaceとFieldItemInterfaceするように、$node->title->valueコールの$node->title->get(0)->get('value')->getValue()あなたのために。
要約すると:
$node->moderation_state->get(0)->get('target_id')->getValue() モデレーション状態の構成エンティティのIDを提供します。
$node->moderation_state->get(0)->get('entity')->getValue()ModerationState構成エンティティが提供されるので、そのメソッドを::isPublished()やのように直接使用できます::label()。
$node->moderation_state->target_idそして$node->moderation_state->entity、それぞれ同じことを達成するであろう。
私はこれについて私の同僚のために稲妻の話をしました、もしあなたが興味を持っているなら、スライドがここにあるのは残念ながら録音はうまくいきませんでした。