web-dev-qa-db-ja.com

D8のテーマでプログラムによって連絡先フォームをレンダリングする方法

横方向の連絡フォーム(フィードバック)をカスタムブロックまたは他のページに個別に表示してから/ contact(例:frontpage)を取得するにはどうすればよいですか?

私はこのコードを試しましたが、機能していません(連絡先フォームエンティティですか?):

// 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);
8
alexej_d

お問い合わせフォームはエンティティですが、表示できません。

代わりに、contact_formをバンドルとして含むcontact_messageの追加フォームが必要です。

例としてContactController::contactSitePage()(編集: API docs )を参照してください:

$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());

編集(@nilsunに感謝):entityTypeManagerに代わり、entityManagerは非推奨となっていることに注意してください。

6
Berdir