logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll

9.10.1. Drupal Fields API。Field Widget:データ入力フィールド、フィールド用のフォーム。

01/10/2019, by mikhail

Menu

このチュートリアルでは、Link モジュールの Field Widget がどう動作するかを見ていきます。これは概説記事なので、独自の Field Widget を書き始めたい場合は、続く記事に進んでください。

前のレッスンでは、ノードとブロックに Link フィールドを追加しました。次に、Link フィールドのフォームが何によって形成されるかを見てみましょう。

Drupal での PHP クラスのオートロードにはすでに触れました。また、フィールド用の WidgetBase フィールドウィジェットクラスもあります:

core/lib/Drupal/Core/Field/WidgetBase.php

モジュールで新しい子クラスを作成し、それを src/Plugin/Field/FieldWidget に置くと、クラスが自動的に接続され、フィールドに使えます。Link フィールドのウィジェットクラスを見てみましょう:

core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php

クラスのアノテーションには、このウィジェットが使えるフィールドタイプが含まれています:

/**
 * Plugin implementation of the 'link' widget.
 *
 * @FieldWidget(
 *   id = "link_default",
 *   label = @Translation("Link"),
 *   field_types = {
 *     "link"
 *   }
 * )
 */

このようにして、既存のフィールド用にカスタムモジュールに新しいフィールドウィジェットを追加できます。

それでは、formElement() メソッドに移りましょう。これはおそらく主要なウィジェットメソッドの 1 つで、Form API を通じてフォーム要素が追加されます。Link ウィジェットには 3 つの要素があります:

$element['title']
$element['uri']
$element['attributes']
これらのフィールドは、ノードやブロックのフォームでデータを入力するために使われます。フィールドには検証も追加されます。というのも、例えば URI フィールドは正しい URL またはローカルサイトのアドレスを含まなければならないからです。

また、重要なメソッドの 1 つが settingsForm() です。これは、Manage form ページで見られるカスタマイズフォームを担当します:

link

Field Widget の他のすべてのメソッドは任意です。各メソッドについて詳しくは触れません。カスタムモジュールを書くのに必ずしも使われるわけではないからです。contrib モジュールを書く場合、親クラスのメソッドの説明を読むのは難しくないと思います:

core/lib/Drupal/Core/Field/WidgetBase.php

フィールド用のすべての Field Widget は、各バンドルエンティティごとに Manage form display タブで個別に構成されます:

manage form display