在某个时候,我开始使用以下代码来测试当前页面是否为管理页面:
$route = \Drupal::routeMatch()->getRouteObject();
$is_admin = \Drupal::service('router.admin_context')->isAdminRoute($route);
但是我发现这在hook_entity_load()中的节点编辑页面上失败。
我们如何测试我们是否在Drupal 8的管理页面上?像Drupal 7中的path_is_admin()之类的东西?
我发现,如果我从外部hook_entity_load测试同一节点编辑页面路径,请使用此页面上的代码(https://api.drupal.org/api/drupal/includes%21path.inc/function/path_is_admin/7.x) 有用。
use Symfony\Component\HttpFoundation\Request;
use Symfony\Cmf\Component\Routing\RouteObjectInterface;
$path = '/node/75/edit';
$request = Request::create($path);
$route_match = \Drupal::service('router.no_access_checks')->matchRequest($request);
$route = $route_match[RouteObjectInterface::ROUTE_OBJECT];
$is_admin = \Drupal::service('router.admin_context')->isAdminRoute($route);
但是,如果我尝试使用当前路径在hook_entity_load中添加此代码,则会出现致命循环。
我认为卡住的地方是在hook_entity_load中加载当前路由。
_node_operation_route
启用了该选项的所有路由也将获得option _admin_route
。\Drupal::service('router.admin_context')->isAdminRoute()
默认情况下检查当前路由的标志。