web-dev-qa-db-ja.com

フィールドが段落であるかどうかを知る方法

ノードのフィールドが段落である場合は、タイプのみを取得し、entity_reference_revisionsであることを知りたいのですが、このメソッドを使用して情報を取得します。

\Drupal\field\Entity\FieldStorageConfig::loadByName()

しかし、私はこの情報を得ることができません

 [settings:protected] => Array
    (
        [target_type] => paragraph
    )

私が取得する唯一の方法は、データベースに直接チェックして、テーブルのparagraphs_item_field_dataにあるフィールドの名前を確認することです。

ありがとう

オスカー

1
Oskar Calvo

あなたはおそらく EntityFieldManager サービスを探しています。コンテナからentity_field.managerとして入手できます。その EntityFieldManager :: getFieldDefinitions() メソッドは、特定のエンティティタイプおよびバンドルに属するすべてのフィールドに対して フィールド定義 を返します(コンテンツタイプ)、フィールド名でキー付け:

$definitions = \Drupal::service('entity_field.manager')->getFieldDefinitions('node', 'page');
if (
  isset($definitions['field_to_check'])
  && $definition = $definitions['field_to_check']
  && $definition->getSetting('target_type')
  && $definition->getSetting('target_type') == 'paragraph'
) {
  // Is a field of a 'node' entity, belongs to the bundle
  // 'page', has the 'target_type' property, and finally
  // references paragraphs.
}

FieldStorageConfig :: loadByName() のみを使用してフィールドストレージ定義をロードする場合は、注意が必要です。フィールド定義は、さまざまなバンドル(コンテンツ)タイプによって異なる場合があります。したがって、バンドル(コンテンツタイプ)が、参照フィールドを調査しているノードのバンドルと一致するかどうかをさらに確認する必要があります。

5
Mario Steinitz