如何在D8中以编程方式呈现主题中的联系表单


8

如何获得在自定义块或其他页面(然后是/ contact)(例如,首页)中单独显示的横向联系表格(反馈)?

我已经尝试过此代码,但是它不起作用(联系表单实体吗?):

// 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)entityManager不推荐使用entityTypeManagerAPI docs
nilsun '16

我想引用一个新的主D8的问题,以帮助所有的子问题,问题是,造成开放的基本问题,这里有据可查的细节:drupal.stackexchange.com/questions/197149/...
nilsun

Answers:


6

联系人表单是一个实体,但您无法查看。

相反,您需要的是一个contact_message的添加形式,其中contact_form为捆绑包。

参见ContactController::contactSitePage()(EDIT: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):请注意,不赞成使用EntityManager,而推荐使用EntityTypeManager。


INFO:entityManager不推荐使用entityTypeManagerAPI docs),答案中的某些链接丢失了。在回答它规定: ContactController::contactSitePage()为例。它在哪里?它是Drupal.org上的一个文档页面吗?它是核心功能吗?既然问题是关于.theme的,如何在预处理功能中实现呢?去年年底情况发生了变化,大多数答案中都缺少有关此类问题的最终D8核心的信息。
nilsun '16

我想引用一个新的主D8的问题,以帮助所有的子问题,问题是,造成开放的基本问题,这里有据可查的细节:drupal.stackexchange.com/questions/197149/...
nilsun

String :: checkPlain现在为SafeMarkup :: checkPlain
pcambra

1
@pcambra谢谢,请注意,任何人都可以更新答案,您可以自己修复类似的问题。
Berdir
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.