在Drupal 8中以编程方式获取表格


12

文档指出:

传递给getForm()方法的参数是定义表单的类的名称,并且是\ Drupal \ Core \ Form \ FormBuilderInterface的实现。

如何找到定义核心联系人模块提供的网站反馈表单的类的名称(表单ID为:)。feedback_contact_message_form

当我dpm()填写表格时,可以看到定义了一个类:

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

我尝试了各种形式的参数作为传递给的参数:

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

但没有运气。谢谢


1
联系表格是实体,因此我想它们都来自Drupal\contact\ContactFormEditForm。除非您知道这是一种实体形式,否则不知道有一种简单的方法可以找到答案。最好的方法可能是在模块的src文件夹下查找名称以开头的文件Form.php。我认为这是遵循的安全惯例
克莱夫(Clive)

我的问题中Berdir的答案对您没有帮助吗?drupal.stackexchange.com/questions/146617/...
alexej_d

谢谢,但我不听Berdir的回答。我在答案下方添加了块插件-在代码示例中添加了前两行。我从这里去哪里?谢谢。
dbj44

Answers:


13

这将在一个块插件中呈现:

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;
  }
}

我有同样的问题。我们可以分享笔记和聊天吗?我要做的只是从网站的某处获取一个表单,然后将其输出到启用PHP的文本字段中的其他位置。
Patoshiパトシ2016年

如何以编程方式提交此实体表格?
Unnikrishnan

如果表单需要在#after_build上执行操作,以进行Ajax操作,我们有什么解决方案吗?
allabakash.g
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.