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


8

横方向の連絡フォーム(フィードバック)をカスタムブロックまたは他のページ(/ 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);

情報:1)デフォルトのサイド全体の連絡フォーム(フィードバック)はエンティティです(ログインフォームではありません)。2)(API docs)をentityManager支持して廃止されますentityTypeManager
nilsun

ここで詳細に文書化されている、開いている基本的な質問によって引き起こされる、このようなすべてのサブ質問を支援するために、D8の新しいメイン質問を参照したいと思います。drupal.stackexchange.com
197149

回答:


6

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

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

例としてContactController::contactSitePage()(編集:APIドキュメント)を参照してください:

$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は非推奨となっていることに注意してください。


INFO:(API docs)のentityManagerために非推奨になり、回答にいくつかのリンクがありません。答えはそれを述べています:例として見てください。それはどこにある?Drupal.orgのドキュメントページですか?コアの機能ですか?質問は.themeに関するものだったので、これを前処理関数に実装する方法は?昨年末に状況が変化し、ほとんどの回答でこのような質問に関する最終的なD8コアに関する情報が不足しています。entityTypeManager ContactController::contactSitePage()
nilsun 2016

ここで詳細に文書化されている、開いている基本的な質問によって引き起こされる、このようなすべてのサブ質問を支援するために、D8の新しいメイン質問を参照したいと思います。drupal.stackexchange.com
197149

String :: checkPlainはSafeMarkup :: checkPlainになりました
pcambra

1
@pcambraありがとう、誰でも答えを更新できることに注意してください。あなたはそのようなものを自分で修正することができます。
Berdir
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.