Drupal 8-如何为特定节点类型添加任务和上下文链接



我为base_route:entity.node.canonical 创建了一个任务链接和一个上下文链接

mymodule.routing.yml

mymodule.mycustomroute:
  path: '/node/{node}/custom-path'
  defaults:
    _form: 'DrupalmymoduleFormMyForm'
  requirements:
    _permission: 'my permission'
    node: '[0-9]+'

mymodule.links.tasks.yml

mymodule.mycustomroute:
  route_name: mymodule.mycustomroute
  base_route: entity.node.canonical
  title: 'my title'

mymodule.links.contextual.yml

mymodule.mycustomroute:
  route_name: mymodule.mycustomroute
  group: node

我的链接显示在每个节点上的查看/编辑/删除链接旁边。

现在我想知道如何使这些链接仅适用于特定的节点类型?

mymodule/mymodule.routing.yml

mymodule.mycustomroute:
  path: '/node/{node}/custom-path'
  defaults:
    _form: 'DrupalmymoduleFormMyForm'
  requirements:
    _permission: 'my permission'
    _custom_access: 'DrupalmymoduleAccessNodeTypeAccessCheck::access'
    _node_types: 'node_type_1,node_type_2,node_type_n'
    node: 'd+'

mymodule/src/Access/NodeTypeAccessCheck.php:

namespace DrupalmymoduleAccess;
use DrupalCoreAccessAccessCheckInterface;
use DrupalCoreAccessAccessResult;
use DrupalnodeNodeInterface;
use SymfonyComponentRoutingRoute;
/**
 * Check the access to a node task based on the node type.
 */
class NodeTypeAccessCheck implements AccessCheckInterface {
  /**
   * {@inheritdoc}
   */
  public function applies(Route $route) {
    return NULL;
  }
  /**
   * A custom access check.
   *
   * @param DrupalnodeNodeInterface $node
   *   Run access checks for this node.
   */
  public function access(Route $route, NodeInterface $node) {
    if ($route->hasRequirement('_node_types')) {
      $allowed_node_types = explode(',', $route->getRequirement('_node_types'));
      if (in_array($node->getType(), $allowed_node_types)) {
        return AccessResult::allowed();
      }
    }
    return AccessResult::forbidden();
  }
}

或者您可以在mymodule.links.menu.yml文件中指定路由参数:

mymodule.add_whatever:
  title: 'Add whatever'
  description: 'Add whatever'
  route_name: node.add
  route_parameters: { node_type: 'name_of_node_type' }
  menu_name: main
  weight: 7

最新更新