Drupal 8でプログラムでフォームを取得する


12

ドキュメントの状態:

getForm()メソッドに渡される引数は、フォームを定義するクラスの名前であり、\ Drupal \ Core \ Form \ FormBuilderInterfaceの実装です。

コアコンタクトモジュールによって提供されるWebサイトフィードバックフォームを定義するクラスの名前を確認するにはどうすればよいですか(フォームIDは次のとおりです)。feedback_contact_message_form

とき、私はdpm()、フォームIは、定義されたクラスがあることがわかります。

$input array(30)
  '#attributes' => array(1)
    'class' => array(3)
      string(29) "feedback-contact-message-form"
      string(20) "contact-message-form"
      string(12) "contact-form"

渡すパラメータとしてこれのさまざまな形式を試しました:

\Drupal::formBuilder()->getForm();

しかし、運はありません。ありがとう


1
お問い合わせフォームはエンティティであるため、すべてがから来ていると思いDrupal\contact\ContactFormEditFormます。ただし、エンティティフォームであることがわからない限り、簡単に見つける方法はありません。最良の方法はsrc、名前がで終わるファイルをモジュールのフォルダーの下で調べることForm.phpです。それは従うべき安全な慣習だと思う
クライブ

私の質問でのBerdirの答えは役に立ちませんか?drupal.stackexchange.com/questions/146617/...
alexej_d

感謝しますが、Berdirの答えには従いません。回答の下にブロックプラグインを追加しました-コードサンプルから最初の2行を追加します。ここからどこに行きますか?ありがとう。
24ma13wg

回答:


13

これはブロックプラグイン内でレンダリングします。

class myModule extends BlockBase {
  public function build() {

    $default_form = \Drupal::config('contact.settings')->get('default_form');
    $entity = \Drupal::entityManager()->getStorage('contact_form')->load($default_form);

    $message = \Drupal::entityManager()
      ->getStorage('contact_message')
      ->create(array(
        'contact_form' => $entity->id(),
      ));

    $form = \Drupal::service('entity.form_builder')->getForm($message);

    return $form;
  }
}

私は同じ問題を抱えています。メモやチャットを共有できますか?私がやりたいのは、サイトのどこかからフォームを取得し、PHP対応のテキストフィールド内の別の場所に出力することだけです。
パトシパトシ

このエンティティフォームをプログラムで送信するにはどうすればよいですか?
-Unnikrishnan

フォームが#after_buildで動作する必要がある場合、ajax操作のために、解決策はありますか?
-allabakash.g
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.