web-dev-qa-db-ja.com

プログラムで段落エンティティ参照フィールドを作成する

ソーシャルメディア情報(名前とアイコン)を追加できる構成ページを作成する必要があります。ユーザーは、必要なだけソーシャルメディアを追加できる必要があります。これを行うには、名前とアイコンの2つのフィールドを持つ段落を作成します。次に、この段落をエンティティ参照フィールドとしてプログラムで構成ページに追加します。段落のマシン名はsocial_mediaです。

私はこれを試しましたが、うまくいきませんでした:

public function buildForm(array $form, FormStateInterface $form_state) {

    $form['social_media_fieldset'] = [
      '#type' => 'fieldset',
      '#title' => $this->t('Social Media Configuration'),
      '#collapsible' => TRUE,
      '#collapsed' => FALSE,
    ];

    $field = BaseFieldDefinition::create('entity_reference')
      ->setLabel(t('Type'))
      ->setDescription(t('The Paragraphs type.'))
      ->setSetting('target_type', 'paragraph')
      ->setSetting('handler', 'default')
      ->setSetting('handler_settings',['target_bundles'=>
                      ['social_media'=>'social_media']
          ]);

    $form['social_media'] = $field;

    return parent::buildForm($form, $form_state);
  }

ページは表示されますが、フォームはありません:

enter image description here

1
Mohammed ATIFI

次のコードは、カスタムエンティティにフィールドを追加するときに私に役立ちました。これにより、段落と改訂への参照が提供されます。段落を編集しても、参照フィールドは引き続き古いリビジョンを参照することに注意してください。フィールドタイプはentity_reference_revisionsで、段落のタイプです。

$fields['social_media_id'] = BaseFieldDefinition::create('entity_reference_revisions')
  ->setLabel(t('Skill'))
  ->setDescription(t('The ID of the skill'))
  ->setRevisionable(TRUE)
  ->setSetting('handler', 'default:paragraph')
  ->setSetting('handler_settings', ['target_bundles' => ['social_media' => 'social_media']])
  ->setSetting('handler_settings', ['negate' => 0])
  ->setTranslatable(TRUE)
  ->setDisplayOptions('form', [
    'type' => 'entity_reference_autocomplete',
    'weight' => 5,
    'settings' => [
      'match_operator' => 'CONTAINS',
      'size' => '60',
      'autocomplete_type' => 'tags',
      'placeholder' => '',
    ],
  ])
  ->setDisplayConfigurable('form', TRUE);
1
Siim