9.10.2. Drupal Fields API。Field Formatter:ページにデータフィールドを表示する
この記事では、フィールドの表示を編集してページに表示できる Field Formatters を検討します。
過去の記事で、Link フィールドタイプを作成しました。この記事では、これらのフィールドがページにどう表示されるか、そしてどのクラスがそれを担当するかを見ていきます。Drupal を通じて追加する各フィールドは、ページに表示でき、Manage display ページでその設定を編集できます。

Format 列で、フィールドの表示方法を選べます。この列は Field Formatter クラスによって形成されます。ページへのリンクを表示する Link モジュールのクラスを見てみましょう:
core/modules/link/src/Plugin/Field/FieldFormatter/LinkFormatter.php
クラスのアノテーションは、このフォーマッターがどのタイプのフィールドに属するかを示します。
/**
* Plugin implementation of the 'link' formatter.
*
* @FieldFormatter(
* id = "link",
* label = @Translation("Link"),
* field_types = {
* "link"
* }
* )
*/
このファイルで主に関心があるのは viewElements() メソッドです。このメソッドは、ページへのデータの出力を担当します。フォーマッターはデータベースにリクエストを送らず、変数 $items からデータを取る点に注意してください。エンティティからのレンダリング済みデータが $items に渡されます。したがって、データ入力の Field Widget、データ保存の Field Storage、データ出力の Field Formatter というクラスの責任の分離があります。これは非常に便利です。というのも、異なるレベルでデータをキャッシュできるからです。例えば、出力や Field Formatter の設定が変わっても、ノードのキャッシュをリセットする意味はありません。データは変わらず、その出力だけが変わるからです。デバッグや新しい機能の追加にも便利です。出力だけを変える必要がある場合は、フィールドタイプに新しい Field Formatter を追加して、独自の出力を書きます。
また、LinkFormatter クラスには settingsForm() メソッドがあり、Manage display ページでのフォーマッターの構成を担当します。Form API を通じて、フィールドの設定フィールドを追加し、これらの設定を構成に保存できます。
Link モジュールにはもう 1 つフォーマッターがあります:
core/modules/link/src/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php
これは通常の LinkFormatter から継承されていますが、1 つ違いがあります。このフォーマッターには別のテンプレートが接続されています:
core/modules/link/templates/link-formatter-link-separate.html.twig
したがって、フィールドを出力する HTML は、テンプレートを通すことで得られます。そしてフォーマッターは、複数値フィールドの各値に対して $delta を通じてデータを書き込む $element ファイルを形成するだけです。
ご覧のとおり、Field API はかなりシンプルで使いやすいです。次の記事では、Storage、Widget、Formatter を持つ独自のタイプのフィールドを書きます。