Secara terprogram mendapatkan formulir di Drupal 8

12

The dokumentasi menyatakan:

Argumen yang diteruskan ke metode getForm () adalah nama kelas yang mendefinisikan formulir Anda dan merupakan implementasi dari \ Drupal \ Core \ Form \ FormBuilderInterface.

Bagaimana cara mengetahui nama kelas yang mendefinisikan formulir umpan balik situs web yang disediakan oleh modul kontak inti (id formulir adalah:) feedback_contact_message_form.

Ketika saya dpm()formulir saya bisa melihat bahwa ada kelas yang didefinisikan:

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

Saya mencoba berbagai bentuk ini sebagai parameter untuk diteruskan ke:

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

tapi tidak berhasil. Terima kasih

dbj44
sumber
1
Formulir kontak adalah entitas, jadi saya bayangkan mereka semua berasal Drupal\contact\ContactFormEditForm. Tidak yakin ada cara mudah untuk mengetahuinya kecuali Anda tahu itu bentuk entitas. Cara terbaik mungkin untuk mencari di bawah srcfolder modul untuk file yang namanya berakhir dengan Form.php. Saya pikir itu adalah konvensi yang aman untuk diikuti
Clive
Tidakkah jawaban Berdir dalam pertanyaan saya membantu? drupal.stackexchange.com/questions/146617/…
alexej_d
Terima kasih, tetapi saya tidak mengikuti jawaban Berdir. Saya telah menambahkan plugin blok saya di bawah jawaban saya - menambahkan dua baris pertama dari sampel kode Anda. Kemana saya harus pergi dari sini? Terima kasih.
dbj44

Jawaban:

13

Ini merender dalam plugin blok:

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;
  }
}
dbj44
sumber
Saya mengalami masalah yang sama. bisakah kita berbagi catatan dan mengobrol? Yang ingin saya lakukan hanyalah mengambil formulir dari suatu tempat di situs dan mengeluarkannya di tempat lain di dalam bidang teks yang diaktifkan PHP.
Patoshi パ ト シ
Bagaimana saya bisa mengirimkan formulir entitas ini secara terprogram?
Unnikrishnan
jika form perlu ditindaklanjuti pada #after_build, untuk operasi ajax, apakah kita punya solusi?
allabakash.g