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されます。
あなたはターゲット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);
_