まず、いくつかの背景。
入力すると$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
、それぞれ同じことを達成するであろう。
私はこれについて私の同僚のために稲妻の話をしました、もしあなたが興味を持っているなら、スライドがここにあるのは残念ながら録音はうまくいきませんでした。