Entity baseFieldDefinitions field examples in drupal

Entity baseFieldDefinitions field examples in drupal
sinceretechnology

 

 

 

 

はじめに

 

 

前回は、Drupalのサンプルモジュールからエンティティタイプのサンプルを使用して、新しいエンティティタイプを作成する方法を記事にしました。

【Drupal】新しいエンティティタイプを作成する

 

サンプルモジュールでは、基本的なフィールドタイプしか使用されていなかったため、今回はさまざまなフィールドタイプの使用例をご紹介します。

フィールドタイプはDrupal Core内で定義されています。ここでは下記のサイトを参考にして、Drupal Coreで定義されている各フィールドタイプの設定方法について説明しています。

 

 

 

 

 


 

この記事は以下のサイトを、 DeepL版プロの翻訳家 テンプレートを使用して翻訳して引用しています。AI翻訳のため一部訳がおかしい箇所がありましたらご容赦ください。

 

Entity baseFieldDefinitions Fields example in Drupal8

 

 

 

 

Entity baseFieldDefinitions Fields example in Drupal8

 

 

Drupal Coreには以下の29のフィールドタイプが定義されています。

 

  1. boolean
  2. changed
  3. created
  4. decimal
  5. email
  6. entity_reference
  7. float
  8. integer
  9. language
  10. map
  11. password
  12. string
  13. string_long
  14. timestamp
  15. uri
  16. uuid
  17. comment
  18. datetime
  19. file
  20. image
  21. link
  22. list_float
  23. list_integer
  24. list_string
  25. path
  26. telephone
  27. text
  28. text_long
  29. 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_textfieldtext_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:

 

 

 


この記事に関するご質問やご意見などございましたらお問い合わせフォームからお気軽にご連絡ください。