web-dev-qa-db-ja.com

drupal 8)でコンテンツタイプのフィールドと値を取得する方法

カスタムコンテンツタイプからデータ全体をフェッチしてjsonファイルを生成するモジュールを作成したいと思いました。だから私は関数を使用しました

$values = \Drupal\Core\Entity\ContentEntityBase::get('field_name');

コンテンツタイプのフィールドとその値を読み取ります。すべてのフィールドとその値を動的にフェッチする方法。解決策はありますか?よろしくお願いします。

3
Vishnu Jayan

Entity Field Managerサービスから getFieldDefinitions を使用して、コンテンツタイプのすべてのフィールド定義を取得できます。定義にはフィールド名でインデックスが付けられるため、サイト内の任意のノードの返された配列のキーを反復処理できます。

例は次のようになります:

<?php
  // Get the definitions
  $definitions = \Drupal::service('entity_field.manager')->getFieldDefinitions('node', 'my_custom_content');

  // Load a node for which you want to get the field values
  $my_node = \Drupal\node\Entity\Node::load($my_nid);

  // Iterate through the definitions
  foreach (array_keys($definitions) as $field_name) {
    // Get the values for your node
    // Use getValue() if you want to get an array instead of text.
    $values[$field_name] = $my_node->get($field_name)->value;
  }
4
dinopmi