web-dev-qa-db-ja.com

ノーマライザでtarget_idの代わりに参照されるエンティティ名を取得するにはどうすればよいですか?

REST JSON形式で記事タイプのコンテンツを公開しています。必要なデータ形式を生成するためにノーマライザを使用しています。

ノーマライザー:

use Drupal\serialization\Normalizer\ContentEntityNormalizer;

/**
 * StdClass normalizer.
 */
class NewsFeedNormalizer extends ContentEntityNormalizer {

  /**
   * @inheritDoc
   */
  public function normalize($entity, $format = NULL, array $context = []) {
    $node_detail = parent::normalize($entity, $format, $context);
    // $news_data = [];
    $news_data['id'] = $node_detail['nid'][0]['value'];
    $news_data['type'] = $node_detail['field_story_type'][0]['target_id'];
    $news_data['title'] = $node_detail['title'][0]['value'];
    $news_data['summary'] = $node_detail['body'][0]['summary'];

    return $news_data;
  }

}

上記のコードはtarget_id$news_data['type']を返します。しかし、私は参照される用語のラベルを渡す必要があります。 EntityReferenceFieldItemNormalizerという別のノーマライザーを試してみましたが、必要な結果が得られませんでした。この点で誰かが私を助けてくれますか?提案はすべてapprceiatedされます。

1
Suraj

あなたはターゲットIDを持っているので、用語をロードして、ターゲットIDの代わりにラベルを送信するだけです:

_$tid = $node_detail['field_story_type'][0]['target_id'];
$term  =  \Drupal\taxonomy\Entity\Term::load($tid);
$news_data['type'] = $term->label();
_

注:クラスにいるので、_entity.manager_サービスを挿入し、\Drupal\taxonomy\Entity\Term::load($tid);の行を次のように変更することをお勧めします。

_$this->entityManager->getStorage('taxonomy_term')->load($tid);
_
0
berramou