首页 > 解决方案 > Drupal 9 - 使用控制器的自定义模块中的表单 - html标签表单不存在

问题描述

我正在尝试使用 Drupal 控制器在自定义页面上呈现有限的用户编辑表单。在routing.yml中我定义了_controller,我不想使用_form。

我想在表单上显示,例如只显示时区字段,而不是其他字段。我无法实现它。我可以渲染这个字段,其他字段,如 form_build_id、form_id、form_token 但根本不渲染表单 html 标记。只有当我像这样 {{ form.form }} 以树枝整个形式显示时它才有效

这是我的文件:

my_module.info.yml

name: 'My module'
type: module
description: 'my module'
core_version_requirement: ^8.8 || ^9

my_module.routing.yml

my_module.mymodule_controller_view::
  path: '/my-module'
  defaults:
    _controller: '\Drupal\my_module\Controller\MymoduleController::view'
    _title: 'My module'
  requirements:
    _permission: 'access content'

my_module.module

<?php

function my_module_theme($existing, $type, $theme, $path)
{
    $templates = array(
        'my_module_form' => [
            'render element' => 'form',
        ],
    );

    return $templates;
}

我的模块控制器.php

<?php

namespace Drupal\my_module\Controller;

use Drupal\Core\Controller\ControllerBase;
use Drupal\user\Entity\User;

class MymoduleController extends ControllerBase
{

    public function view()
    {
        $data['header'] = [
            '#type' => 'markup',
            '#markup' => '<h1>HEADER</h1>',
        ];

        $user = User::load(\Drupal::currentUser()->id());
        $formObject = \Drupal::entityTypeManager()
            ->getFormObject('user', 'default')
            ->setEntity($user);

        $form = \Drupal::formBuilder()->getForm($formObject);

        $data['form'] = [
            '#theme' => 'my_module_form',
            'form' => $form,
        ];

        $data['footer'] = [
            '#type' => 'markup',
            '#markup' => '<h3>footer</h3>',
        ];

        return $data;

    }

}

我的模块-form.html.twig

<div>TWIG TEMPLATE</div>

{{ form.form.timezone }}
{{ form.form.form_build_id }}
{{ form.form.form_token }}
{{ form.form.form_id }}
{{ form.form.actions }}

提前感谢您的任何提示。

标签: formsdrupaltwigdrupal-8drupal-modules

解决方案


推荐阅读