首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将节点参数传递给本地任务窗体?

如何将节点参数传递给本地任务窗体?
EN

Drupal用户
提问于 2023-05-30 16:07:56
回答 2查看 28关注 0票数 1

假设我有一个类似于这样的本地任务的路径:

代码语言:javascript
复制
MODULE_NAME.node_options:
  path: '/node/{node}/options'
  defaults:
    _form: '\Drupal\MODULE_NAME\Form\NodeOptionsForm'
    _title: 'Options'
  requirements:
    _entity_access: 'node.update'
    node: \d+
  options:
    parameters:
      node:
        type: 'entity:node'

NodeOptionsForm应向用户显示2-3个单选按钮,以选择要在节点上执行的服务,例如使用A.I创建主体摘要。

( a)我应该为表单使用哪个基类?

( b) {节点}参数是如何实际传递给表单实例的?换句话说,如何创建表单实例才能访问节点?

EN

回答 2

Drupal用户

回答已采纳

发布于 2023-05-30 16:40:40

您可以在您的NodeInterface中使用buildForm类,如下所示

代码语言:javascript
复制
label();
    $form['#node'] = $node;
    return $form;
  }

=> FormBase类将用于所有基本窗体,除非它是一个配置表单。

( b) {节点}参数是如何实际传递给表单实例的?换句话说,表单实例必须如何创建才能访问节点?=> You可以在buildForm中以NodeInterface $node的形式传递它。

票数 1
EN

Drupal用户

发布于 2023-05-31 06:58:29

与不用于本地任务的路由相比,除了在模块的.links.task.yml文件中添加之外,本地任务的路由没有不同的要求。

例如,Book模块定义以下本地任务。

代码语言:javascript
复制
entity.node.book_outline_form:
  route_name: entity.node.book_outline_form
  base_route: entity.node.canonical
  title: Outline
  weight: 2

路线是由这些线定义的。

代码语言:javascript
复制
entity.node.book_outline_form:
  path: '/node/{node}/outline'
  defaults:
    _entity_form: 'node.book_outline'
    _title: 'Outline'
  requirements:
    _permission: 'administer book outlines'
    _entity_access: 'node.view'
    node: \d+
  options:
    _node_operation_route: TRUE

在这种情况下,表单是用_entity_form定义的。它也可以使用_form;在这种情况下,_form值是实现FormInterface的类的名称(包括名称空间),该类由FormBase实现,基类模块可以对其表单进行扩展。其他可用于窗体的基类包括ConfigFormBase、用于配置窗体的ConfirmFormBase、用于确认表单的C8或用于图像效果设置的ImageEffectFormBase

任何路由参数都会传递给buildForm()方法,任何实现FormInterface的类都需要实现。

另一种方法是像Book模块一样,使用hook_entity_build()添加一个新的表单类,并在路由定义中使用_entity_form

代码语言:javascript
复制
function book_entity_type_build(array &$entity_types) {
  /** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */
  $entity_types['node']->setFormClass('book_outline', 'Drupal\\book\\Form\\BookOutlineForm')
    ->setLinkTemplate('book-outline-form', '/node/{node}/outline')
    ->setLinkTemplate('book-remove-form', '/node/{node}/outline/remove')
    ->addConstraint('BookOutline', []);
}

在这种情况下,编辑的实体在$this->entity中传递给实体表单类的方法。

票数 0
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/315902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档