Entity baseFieldDefinitions field examples in drupal
はじめに
前回は、Drupalのサンプルモジュールからエンティティタイプのサンプルを使用して、新しいエンティティタイプを作成する方法を記事にしました。
サンプルモジュールでは、基本的なフィールドタイプしか使用されていなかったため、今回はさまざまなフィールドタイプの使用例をご紹介します。
フィールドタイプはDrupal Core内で定義されています。ここでは下記のサイトを参考にして、Drupal Coreで定義されている各フィールドタイプの設定方法について説明しています。
この記事は以下のサイトを、 DeepL版プロの翻訳家 テンプレートを使用して翻訳して引用しています。AI翻訳のため一部訳がおかしい箇所がありましたらご容赦ください。
Entity baseFieldDefinitions Fields example in Drupal8
Entity baseFieldDefinitions Fields example in Drupal8
Drupal Coreには以下の29のフィールドタイプが定義されています。
- boolean
- changed
- created
- decimal
- entity_reference
- float
- integer
- language
- map
- password
- string
- string_long
- timestamp
- uri
- uuid
- comment
- datetime
- file
- image
- link
- list_float
- list_integer
- list_string
- path
- telephone
- text
- text_long
- text_with_summary
以下に、これらのフィールドタイプの使い方を説明します。
entity_reference field
entity_reference は別のエンティティタイプを参照します。
こちらは、参照先エンティティとしてユーザエンティティを指定した場合の例です。
$fields['user_id'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('Authored by'))
->setDescription(t('The user ID of author of the Demo entity entity.'))
->setSetting('target_type', 'user')
->setSetting('handler', 'default')
->setDisplayOptions('view', [
'label' => 'hidden',
'type' => 'author',
'weight' => 0,
])
->setDisplayOptions('form', [
'type' => 'entity_reference_autocomplete',
'weight' => 5,
'settings' => [
'match_operator' => 'CONTAINS',
'size' => '60',
'autocomplete_type' => 'tags',
'placeholder' => '',
],
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
デフォルトのウィジェットはentity_reference_autocomplete で、デフォルトのフォーマッタは entity_reference_label です。。オートコンプリートのエンティティ タイプを設定できます。
設定ではオートコンプリートを使用することが可能です。
また、ハンドラーを設定することもできます。 (カスタム ハンドラーの作成例はこちらです )
configを使用すると setDisplayOptions 、フィールド ウィジェット (表示コンテキスト - フォーム) とフィールド フォーマッタ (表示コンテキスト - ビュー) のオプションを設定できます。
With setDisplayOptions config, we can set options for the field widget (display context – form) and the field formatter (display context – view).
以下がノード エンティティを使用した別の例です。
$fields['article'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('Article'))
->setDescription(t('Article related to demo entity.'))
->setSetting('target_type', 'node')
->setSetting('handler', 'default:node')
->setSetting('handler_settings', [
'target_bundles' => ['article' => 'article'],
'auto_create' => FALSE,
])
->setRequired(TRUE)
->setTranslatable(FALSE)
->setDisplayOptions('view', [
'label' => 'visible',
'type' => 'string',
'weight' => 2,
])
->setDisplayOptions('form', [
'type' => 'entity_reference_autocomplete',
'weight' => 2,
'settings' => [
'match_operator' => 'CONTAINS',
'size' => '60',
'placeholder' => 'Enter here article title...',
],
])
->setDisplayConfigurable('view', TRUE)
->setDisplayConfigurable('form', TRUE);
Note that we can set target_bundles in handler_settings.
String field
$fields['name'] – is an example of a string field.
このフィールドにはプレーンな文字列値が含まれます。 デフォルトのウィジェットは string_textfield で、デフォルトのフォーマッタは string です 。
string_long field
string_long は、長い文字列値を含めることができる フィールドを作成することもできます。 デフォルトのウィジェットは string_textarea で、デフォルトのフォーマッタは Basic_string です。
$fields['notes'] = BaseFieldDefinition::create('string_long')
->setLabel(t('Notes'))
->setDescription(t('Example of string_long field.'))
->setDefaultValue('')
->setRequired(FALSE)
->setDisplayOptions('view', [
'label' => 'visible',
'type' => 'basic_string',
'weight' => 5,
])
->setDisplayOptions('form', [
'type' => 'string_textarea',
'weight' => 5,
'settings' => ['rows' => 4],
])
->setDisplayConfigurable('view', TRUE)
->setDisplayConfigurable('form', TRUE);
boolean field
エンティティ フィールドにブール値が含まれている場合、デフォルトのウィジェットは boolean_checkbox で、デフォルトのフォーマッタは boolean です。
$fields['status'] = BaseFieldDefinition::create('boolean')
->setLabel(t('Publishing status'))
->setDescription(t('A boolean indicating whether the Demo entity is published.'))
->setDefaultValue(TRUE)
->setSettings(['on_label' => 'Published', 'off_label' => 'Unpublished'])
->setDisplayOptions('view', [
'label' => 'visible',
'type' => 'boolean',
'weight' => 2,
])
->setDisplayOptions('form', [
'type' => 'boolean_checkbox',
'weight' => 2,
])
->setDisplayConfigurable('view', TRUE)
->setDisplayConfigurable('form', TRUE);
list_integer, list_float, list_string fields
These fields come from the options module and basically similar, so it is enough to demonstrate the use of one of them.
All these fields have options_select as the default widget and list_default as the default formatter.
デフォルトのウィジェットはoptions_select で、デフォルトのフォーマッタはlist_default です。
$fields['http_status'] = BaseFieldDefinition::create('list_integer')
->setLabel(t('HTTP status code'))
->setDescription(t('Hypertext Transfer Protocol (HTTP) response status codes.'))
->setDefaultValue(200)
->setSettings([
'allowed_values' => [
200 => 'OK',
201 => 'Created',
202 => 'Accepted',
300 => 'Multiple Choices',
301 => 'Moved Permanently',
302 => 'Moved Temporarily',
403 => 'Forbidden',
404 => 'Not Found',
],
])
->setDisplayOptions('view', [
'label' => 'visible',
'type' => 'list_default',
'weight' => 6,
])
->setDisplayOptions('form', [
'type' => 'options_select',
'weight' => 6,
])
->setDisplayConfigurable('view', TRUE)
->setDisplayConfigurable('form', TRUE);
text, text_long, text_with_summary fields
These fields store a text with a text format.
As the default formatted, all of them uses text_default, for the widget – text_textfield, text_textarea and text_textarea_with_summary.
デフォルトのウィジェットは、それぞれ text_textfield、 text_textarea および text_textarea_with_summary です。またデフォルトのフォーマッタはtext_default です。
$fields['text_long'] = BaseFieldDefinition::create('text_long')
->setLabel(t('Text (formatted, long)'))
->setDescription(t('Test formatted text.'))
->setDisplayOptions('view', [
'label' => 'visible',
'type' => 'text_default',
'weight' => 6,
])
->setDisplayOptions('form', [
'type' => 'text_textarea',
'weight' => 6,
'rows' => 6,
])
->setDisplayConfigurable('view', TRUE)
->setDisplayConfigurable('form', TRUE);
datetime field
デフォルトのウィジェットとデフォルトのフォーマッタは、 どちらも datetime_default です。
$fields['start_date'] = BaseFieldDefinition::create('datetime')
->setLabel(t('Only Date'))
->setDescription(t('Date field example.'))
->setRevisionable(TRUE)
->setSettings([
'datetime_type' => 'date',
])
->setDefaultValue('')
->setDisplayOptions('view', [
'label' => 'above',
'type' => 'datetime_default',
'settings' => [
'format_type' => 'medium',
],
'weight' => -9,
])
->setDisplayOptions('form', [
'type' => 'datetime_default',
'weight' => -9,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
残りのフィールドは非常に単純です。
これらのフィールドのウィジェット、フォーマット、設定に関する情報が必要な場合は、このディレクトリ core/lib/Drupal/Core/Field/Plugin/Field/FieldType
を参照するか、コア ディレクトリ ファイル内を @FieldType(
で検索してみてください
すでに作成されているエンティティ タイプを使用する場合は、このエンティティを更新するコマンドを実行する必要があることに注意してください。 また、このエンティティに生成されたデータがある場合、この更新は失敗します。
ダッシュを使用して次を実行するだけです。
With drush just run:
drush entity-updates -y
In hook_update_N you can apply changes with this code:
\Drupal::service('entity.definition_update_manager')->applyUpdates();
Please be aware that for Drupal 8.7.0, the support for automatic entity updates has been removed. Read more details here.
Check the important links now:
- Defining and using Content Entity Field definitions
- FieldTypes, FieldWidgets and FieldFormatters
- Support for automatic entity updates has been removed
この記事に関するご質問やご意見などございましたらお問い合わせフォームからお気軽にご連絡ください。