Entity Prepopulate
Token と YAML 形式のデータを使用して Entity フィールドの値を事前入力します。Entity レベルで動作し、Entity フォームでの堅牢なフィールド事前入力を実現します。
epp
インストール
composer require 'drupal/epp:8.x-1.7'
概要
Entity Prepopulate は、Token を含む事前定義された値で Entity フィールドを自動的に入力できます。フォームレベルで動作する従来の Prepopulate モジュールとは異なり、このモジュールは Entity レベルで動作するため、より堅牢で安全なフィールド事前入力アプローチを提供します。
このモジュールは YAML 構文をサポートしており、複数値フィールドや複数プロパティフィールド(geofield など)を含む複雑な設定が可能です。すべての事前入力はフィールド設定を通じて明示的に行われるため、セキュリティが向上します。値はすべての Token が正常に置換された場合にのみ適用され、フィールドバリデーションにより無効な値が設定されることはありません。
設定は標準の Drupal Field UI を通じてフィールドごとに行います。フィールド設定フォームに「Entity Prepopulate」フィールドセットが追加されます。事前入力値(Token サポート付き)を指定し、新規 Entity 作成時のみ適用するか、既存 Entity の更新時にも適用するかを選択できます。
Features
- Token を含む設定可能な値で任意の Entity フィールドを事前入力
- より堅牢な動作のためにフォームレベルではなく Entity レベルで動作
- 複数値フィールドや複数プロパティフィールド(lat/lng を持つ geofield など)用の YAML 構文をサポート
- すべての Token が正常に置換された場合にのみ値が適用され、不完全なデータを防止
- フィールドバリデーションにより無効な値の設定を防止
- 既存 Entity の編集時にも事前入力を適用するオプションの「更新時も適用」設定
- Token モジュールと統合し、拡張 Token サポートと Token ブラウザを提供
- 設定フォームで利用可能なフィールドプロパティをヘルプリファレンスとして表示
- フィールドごとの明示的な設定により安全な事前入力を確保
- 任意のフィールド設定可能な Entity タイプ(Node、User、Taxonomy Term など)で動作
Use Cases
テキストフィールドにサイト名を事前入力
新しいコンテンツを作成する際にサイト名を自動的に表示するようにテキストフィールドを設定します。フィールドの EPP 設定で値フィールドに「[site:name]」を設定します。ユーザーが新しいコンテンツを作成すると、フィールドには実際のサイト名が事前入力されます。
デフォルトの著者参照を現在のユーザーに設定
Entity 参照フィールド(例:「著者」)を現在ログインしているユーザーで事前入力するように設定します。Token「[current-user:uid]」を値として使用すると、現在のユーザーがデフォルトの選択として自動的に設定されます。
複数値フィールドに複数の値を事前入力
カーディナリティが 1 より大きいフィールドの場合、YAML リスト構文を使用して複数の値を事前入力します。例: - first [site:name] - second value - third value これにより、最初の 3 つのフィールドアイテムにそれぞれの値が入力されます。
geofield に特定の座標を事前入力
geofield のような複数プロパティフィールドの場合、YAML マッピング構文を使用して特定のプロパティをターゲットにします: lat: 51.5074 lng: -0.1278 これにより緯度と経度のプロパティが個別に設定されます。
更新時にステータスフィールドを自動入力
「更新時も適用」を有効にしてステータスフィールドを設定し、Entity 編集時に常に特定の値が適用されるようにします。これは編集ごとにリセットすべきワークフロー状態やトラッキングフィールドに役立ちます。
動的な日付の事前入力
「[current-date:custom:Y-m-d]」のような日付 Token を使用して、新しいコンテンツ作成時に日付フィールドに現在の日付を事前入力します。作成日の追跡やデフォルトの期限設定に役立ちます。
Token の安全性による条件付き事前入力
すべての Token が正常に置換された場合にのみ値が適用されるため、常に利用可能とは限らない Token を安全に使用できます。Token が置換できない場合(例:コンテキスト依存の Token)、フィールドは単に事前入力されず、不完全または破損したデータを防ぎます。
Tips
- 「利用可能なフィールドプロパティ」展開セクションを使用して、複雑なフィールドタイプで YAML 構文でターゲットにできるプロパティを確認できます
- Token モジュールをインストールして Token ブラウザと Core 以外の多くの追加 Token にアクセスできます
- すべての Token が置換された場合にのみ値が適用されます - これはバグではなく機能であり、不完全なデータを防ぎます
- 「更新時も適用」オプションは、編集ごとにリセットまたは再計算すべきフィールドに役立ちます
- 複数値フィールドには、ダッシュマーカー付きの YAML リスト構文を使用します(- item1)
- 複数プロパティフィールド(address や geofield など)には、YAML マッピング構文を使用します(property: value)
- 事前入力の問題をデバッグする際は Drupal のログ(admin/reports/dblog)で EPP 関連のメッセージを確認してください
- このモジュールは Entity レベルで動作するため、事前入力された値は Entity の任意のフォーム表示で表示されます
Technical Details
Admin Pages 1
/admin/structure/types/manage/[content-type]/fields/[entity_type].[bundle].[field_name]
Entity Prepopulate は既存のフィールド設定フォーム(通常のフィールド設定とベースフィールドオーバーライドの両方)にフィールドセットを追加し、事前入力値を設定できます。これは Drupal の任意のフィールド設定ページに表示されます。
Hooks 2
hook_entity_prepare_form
コアの事前入力ロジックを実装します。Entity フォームが準備されているとき、この hook はすべてのフィールドを反復処理し、EPP のサードパーティ設定をチェックし、Token を置換し、YAML を解析し、値を検証し、Entity にフィールド値を設定します。
hook_form_alter
field_config_edit_form と base_field_override_edit_form を変更し、値テキストエリア、Token ブラウザ、フィールドプロパティヘルプ、および「更新時も適用」チェックボックスを含む EPP 設定フィールドセットを追加します。
Troubleshooting 5
Drupal のログで EPP 関連のメッセージを確認してください。一般的な原因:1)すべての Token が置換されていない(特定のコンテキストを必要とする Token を使用している場合)、2)値がフィールドバリデーションに失敗した(例:数値フィールドにテキストを設定)、3)ユーザーがフィールドへの編集アクセス権を持っていない、4)既存 Entity の編集時に「更新時も適用」がチェックされていない。
YAML 解析エラーはログに記録されます。適切な YAML フォーマットを確認してください:一貫したインデント(タブではなくスペース)、適切なリストマーカー(- item)、有効なマッピング構文(key: value)。使用前に YAML バリデータでテストしてください。
より多くの Token と Token ブラウザのために Token モジュールをインストールしてください。ブラウザで Token 構文が正しいことを確認してください。一部の Token は特定のコンテキストを必要とします(例:[node:title] は既存の Node が必要)が、Entity 作成フォームでは利用できない場合があります。
モジュールは事前入力値をフィールド制約に対して検証します。検証に失敗した場合、以前の値が復元され、通知がログに記録されます。事前入力値が期待されるフィールド形式と一致していることを確認してください(整数フィールドには数値、参照には有効な Entity ID など)。
値と「更新時も適用」設定の両方が空/未チェックの状態でフィールド設定を保存すると、不要なモジュール依存関係を防ぐため EPP のサードパーティ設定は自動的に削除されます。
Security Notes 5
- すべての事前入力は設定を通じて明示的に行われます - 元の Prepopulate モジュールのような URL パラメータインジェクションはありません
- 事前入力値を適用する前にフィールド編集アクセスがチェックされます
- 値はフィールド制約に対して検証されてから設定されます
- 無効な値はログに記録されますが適用されず、データ整合性の問題を防ぎます
- このモジュールは Drupal Security Team からセキュリティカバレッジを受けています