forms - 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 }}
提前感谢您的任何提示。
解决方案
推荐阅读
- algorithm - 乐观的证据正确吗?
- excel - 从 Excel 工作表中获取值并将其用作 Azure 中的标记
- react-native - 关闭反应本机应用程序时运行清理
- r - R循环大数据
- python - 如何使用热键按字母顺序对树视图表中的数据进行重新排序
- python - 确定变量是python2.7中的str还是python3中的字节
- ios - Xcode 12.4 中未找到框架 FIRAnalyticsConnector
- javascript - 如何通过节点和javascript中的不和谐机器人代码将用户添加到私人频道?
- vb.net - 关闭和重新打开声明为公开的表单的正确方法是什么?
- angular - 错误:EACCES:权限被拒绝,取消链接“/Users/marina/Desktop/PO/angular-po/dist/angular-po/favicon.ico”