在drupal8中的Twig模板中渲染表单

时间:2017-12-08 05:26:46

标签: drupal drupal-8

我正在使用drupal 8并且我使用表单api创建了表单,

模块目录下的以下代码

  // module/src/Form/ContributeForm

  class ContributeForm extends FormBase {

  public function getFormId() {
     return 'amazing_forms_contribute_form';
  }

  public function buildForm(array $form, FormStateInterface $form_state) 
  {
      $form['title'] = array(
           '#type' => 'textfield',
           '#title' => t('Title'),
           '#required' => TRUE,
      );
      $form['video'] = array(
           '#type' => 'textfield',
           '#title' => t('Youtube video'),
      );
      $form['video'] = array(
          '#type' => 'textfield',
          '#title' => t('Youtube video'),
      );
     $form['develop'] = array(
          '#type' => 'checkbox',
          '#title' => t('I would like to be involved in developing this 
           material'),
    );
    $form['submit'] = array(
          '#type' => 'submit',
          '#value' => t('Submit'),
);
return $form;
}

public function validateForm(array &$form, FormStateInterface $form_state) {
}

public function submitForm(array &$form, FormStateInterface $form_state) {
}
}

现在我需要在下面的枝条模板中渲染上面的视觉效果

 //themes/page.html.twig

 <body>
    {{form.title}}
    {{form.video}}
    {{form.video}}
 </body>

树枝将在主题文件夹下。是否可以在page.html.twig文件中获取变量?

2 个答案:

答案 0 :(得分:1)

通过Twig呈现和自定义表单的最佳方式是,您在表单中使用$form['#theme']值。示例如下:

<强> MODULE_NAME / SCR /窗体/ your_form.php

public function buildForm(array $form, FormStateInterface $form_state){
       .....
       .....

       $form['#theme'] = 'your_form_theme';

       return $form;
}

<强> MODULE_NAME / form.module

function form_theme() {

    $themes['your_form_theme'] = ['render element' => 'form'];

    return $themes;
}

剩下的就是创建自定义树枝并插入表单字段。

<强> MODULE_NAME /模板/你的外形theme.html.twig

<body>
    {{form.field_1}}
    {{form.field_2}}
    {{form.field_3}}
 </body>

希望它可以帮到你!

答案 1 :(得分:1)

您可以使用控制器创建页面。由此,您可以获取表单元素。

在src / Controller文件夹中创建一个module_nameController.php文件。在该文件中,创建一个应扩展到Controllerbase的类。在该文件中,通过使用表单构建器功能,您可以获取表单元素。