web-dev-qa-db-ja.com

WebformエンティティからフォームIDを取得する

WebフォームエンティティのフォームIDを出力する必要があります。使用して、有効なWebフォームのチャンクをデータベースから直接ロードします

\Drupal::entityTypeManager()->getStorage('webform')->loadMultiple();

その後、webformエンティティのform_idを出力する必要があります。

これを達成する方法は?返されたエンティティオブジェクトに格納されている「form_id」が表示されません。

更新:

次のスクリプトを使用して、フォームIDの静的バージョンを受け取ることができます。

$target_form_id = str_replace('email_confirm_redirect_2_', '', $entity->getSubmissionForm()['#form_id']);

まだ本当にプロではない

2
mogio

フォームIDを保存するのではなく、WebフォームIDを保存して、フォームの変更を確認するだけです。 Webformは独自のフォーム変更フックを提供しており、Webformに対してのみ起動し、専用のインクルードファイルにフックを配置できます。

フックからWebフォームを取得する例については、 _third_party_settings/webform.honeypot.inc_honeypot_webform_submission_form_alter()を参照してください。

_/**
 * Implements hook_webform_submission_form_alter().
 */
function honeypot_webform_submission_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  // <snip>

  /** @var \Drupal\webform\WebformSubmissionInterface $webform_submission */
  $webform_submission = $form_state->getFormObject()->getEntity();
  $webform = $webform_submission->getWebform();
_

そこから$webform->id()を使用して、WebフォームIDを取得できます。

3
Andy