首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将某些路线排除在维修模式之外?

如何将某些路线排除在维修模式之外?
EN

Drupal用户
提问于 2020-09-30 20:45:47
回答 1查看 511关注 0票数 4

我试图通过将选项_maintenance_access添加到路由并将其设置为TRUE,从而使某些路由免于维护模式的限制。

我认为(虽然我不是100%),这是因为在Drupal\Core\Site\维护模式中有以下方法检查_maintenance_access选项,如果它存在,则返回false -

代码语言:javascript
复制
public function applies(RouteMatchInterface $route_match) {
  if (!$this->state->get('system.maintenance_mode')) {
    return FALSE;
  }

  if ($route = $route_match->getRouteObject()) {
    if ($route->getOption('_maintenance_access')) {
      return FALSE;
    }
  }

  return TRUE;
}

我遵循了关于drupal.org关于如何改变现有路线的指南。

这是我的mymodule.services.yml文件

代码语言:javascript
复制
services:
  mymodule.route_subscriber:
    class: Drupal\mymodule\Routing\MaintenanceModeRouteSubscriber
    tags:
      - { name: event_subscriber }

这是我的MaintenanceModeRouteSubscriber课

代码语言:javascript
复制
get('entity.node.canonical')) {
      $route->addOptions(['_maintenance_access' => TRUE]);
    }
  }
}

但是,当查看此路由(任何节点)时,它仍然处于维护模式,这是不起作用的。

EN

回答 1

Drupal用户

回答已采纳

发布于 2020-09-30 21:35:21

您需要直接覆盖服务。

mymodule.services.yml

代码语言:javascript
复制
services:
  maintenance_mode: # same ID as declared in core.services.yml
    class: Drupal\mymodule\Services\CustomMaintenanceMode # point to your class
    arguments: ['@state']

mymodule/src/Services/CustomMaintenaceMode.php

代码语言:javascript
复制
getParameter('node');
    if ($node instanceof \Drupal\node\NodeInterface && $node->getType() == 'article') {
      return TRUE;
    }
    else {
      return $account->hasPermission('access site in maintenance mode');
    }
  }

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

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

复制
相关文章

相似问题

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