Cara pemrograman membuat formulir kontak dalam tema di D8

8

Bagaimana cara mendapatkan formulir kontak sisi-lebar (umpan balik) yang ditampilkan secara individual di blok khusus atau halaman lain lalu / kontak (misalnya halaman depan)?

Saya sudah mencoba kode ini, tetapi tidak berfungsi (apakah entitas formulir kontak?):

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

// get view builder
// render view
$view_builder = \Drupal::entityManager()->getViewBuilder('contact_form');
$full_output = $view_builder->view($entity);
alexej_d
sumber
INFO: 1) formulir kontak sisi-lebar default (umpan balik) adalah suatu entitas (tidak demikian dengan formulir login). 2) entityManagertidak digunakan lagi karena entityTypeManager( API docs )
nilsun
Saya ingin merujuk ke pertanyaan D8 utama baru untuk membantu dengan semua sub-pertanyaan seperti ini di sini, disebabkan oleh pertanyaan dasar terbuka, didokumentasikan dengan baik di sini secara detail: drupal.stackexchange.com/questions/197149/…
nilsun

Jawaban:

6

Formulir kontak adalah suatu entitas, tetapi Anda tidak dapat melihatnya.

Yang Anda inginkan adalah bentuk add dari contact_message dengan contact_form sebagai bundle

Lihat ContactController::contactSitePage()(EDIT: API docs ) sebagai contoh:

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

// This works in a controller, use \Drupal::service('entity.form_builder') elsewhere.
$form = $this->entityFormBuilder()->getForm($message);
$form['#title'] = SafeMarkup::checkPlain($contact_form->label());

EDIT (terima kasih @nilsun): Perhatikan bahwa entityManager tidak digunakan lagi karena entityTypeManager.

Berdir
sumber
INFO: entityManagertidak digunakan lagi karena entityTypeManager( API docs ) dan beberapa tautan hilang di sini sebagai jawabannya. Dalam jawaban itu menyatakan: Lihat ContactController::contactSitePage() sebagai contoh. Dimana itu? Apakah ini halaman dokumen di Drupal.org? Apakah itu fungsi dalam inti? Bagaimana menerapkan ini dalam fungsi preprocess karena pertanyaannya adalah tentang .theme? Banyak hal telah berubah akhir tahun lalu dan ada informasi yang hilang tentang inti D8 akhir mengenai pertanyaan semacam itu di sebagian besar jawaban.
nilsun
Saya ingin merujuk ke pertanyaan D8 utama baru untuk membantu dengan semua sub-pertanyaan seperti ini di sini, yang disebabkan oleh pertanyaan dasar terbuka, didokumentasikan dengan baik di sini secara detail: drupal.stackexchange.com/questions/197149/…
nilsun
String :: checkPlain sekarang SafeMarkup :: checkPlain
pcambra
1
@ pcambra Terima kasih, perhatikan bahwa siapa pun dapat memperbarui jawaban, Anda dapat memperbaiki sendiri sesuatu seperti itu.
Berdir