В какой-то момент я начал использовать следующий код, чтобы проверить, является ли текущая страница страницей администратора:
$route = \Drupal::routeMatch()->getRouteObject();
$is_admin = \Drupal::service('router.admin_context')->isAdminRoute($route);
Но я обнаружил, что это не удается на страницах редактирования узла в hook_entity_load ().
Как мы проверяем, если мы находимся на странице администратора в Drupal 8? Что-то вроде path_is_admin () в Drupal 7?
Я обнаружил, что если я проверяю путь редактирования страницы того же узла извне 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
включенной опцией также получают опцию_admin_route
.\Drupal::service('router.admin_context')->isAdminRoute()
проверяет этот флаг для текущего маршрута по умолчанию.Ответы:
* Обновлено *
Когда я впервые ответил на этот вопрос, страницы редактирования узла и таксономии не были заданы как маршруты администратора. Поэтому я добавил отдельные проверки для тех. Такие отдельные проверки больше не нужны. Следующее, кажется, покрывает это довольно хорошо:
Если вы хотите проверить маршрут, отличный от текущего, вы можете передать его в isAdminRoute ().
Обратите внимание, что описанный выше способ не будет работать для страниц редактирования узла или страниц редактирования термина таксономии, если вы снимите флажок «Использовать тему администрирования при редактировании или создании контента» на странице администрирования темы в / admin / Appearance. Тогда вам понадобится отдельная проверка.
* Оригинальный ответ: *
Чтобы проверить, является ли страница страницей администратора, вы можете использовать двухэтапный процесс. Поскольку регулярное выражение для редактирования узла может не использовать тему администратора.
Сначала я использую метод isAdminRoute:
Затем вы можете использовать дополнительную проверку пути, чтобы увидеть, является ли это страницей редактирования узла:
Вот довольно сложный, но довольно полный способ проверить страницы редактирования терминов узла и таксономии, а также другие маршруты администратора:
источник
\Drupal::routeMatch()->getRouteName()
\Drupal::routeMatch()->getRouteName()
дает мне ноль (Drupal 8.3.2)Следующее является более кратким, и также захватывает страницы редактирования узла, когда они настроены на использование темы администратора.
isAdminRoute
Метод использует текущий маршрут , если он не указан:источник