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

标签 drupal

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

mymodule.routing.yml

mymodule.mycustomroute:
  path: '/node/{node}/custom-path'
  defaults:
    _form: '\Drupal\mymodule\Form\MyForm'
  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: '\Drupal\mymodule\Form\MyForm'
  requirements:
    _permission: 'my permission'
    _custom_access: '\Drupal\mymodule\Access\NodeTypeAccessCheck::access'
    _node_types: 'node_type_1,node_type_2,node_type_n'
    node: '\d+'

mymodule/src/Access/NodeTypeAccessCheck.php :
namespace Drupal\mymodule\Access;

use Drupal\Core\Access\AccessCheckInterface;
use Drupal\Core\Access\AccessResult;
use Drupal\node\NodeInterface;
use Symfony\Component\Routing\Route;

/**
 * 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 \Drupal\node\NodeInterface $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();
  }

}

关于Drupal 8 - 如何为特定节点类型添加任务和上下文链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36496998/

相关文章:

drupal - Drupal 6 中的 PHP 代码

wordpress - 哪个 CMS 使用 ORM(对象关系映射)

javascript - Drupal:Ajax 发布出现内部服务器错误

javascript - 发送电子邮件 onclick 按钮以检索用户电子邮件

jquery - 如何使用 jquery css 将 throbber/进度条 float 在灰色表单上?

templates - Drupal 用户配置文件页面中的自定义菜单选项卡

django - 根据 Django 应用程序中的 Drupal 用户数据库表进行身份验证

php - 在 PHP 中使用 MAX 和 SUBSTRING_INDEX 的 SQL 查询

drupal - 向 Drupal 上的 View 添加排序?

drupal - 如何在 Drupal 中按角色限制对菜单的访问?