Em algum momento, comecei a usar o código a seguir para testar se a página atual é uma página de administrador:
$route = \Drupal::routeMatch()->getRouteObject();
$is_admin = \Drupal::service('router.admin_context')->isAdminRoute($route);
Mas descobri que isso falha nas páginas de edição do nó em hook_entity_load ().
Como testamos se estamos em uma página de administrador no Drupal 8? Algo como path_is_admin () no Drupal 7?
Descobri que se eu testar o mesmo caminho da página de edição de nó de fora de hook_entity_load, usando o código nesta página ( https://api.drupal.org/api/drupal/includes%21path.inc/function/path_is_admin/7.x ) funciona.
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);
Mas se eu tentar adicionar esse código em hook_entity_load usando o caminho atual, recebo um loop fatal.
Acho que onde estou preso está carregando a rota atual em hook_entity_load.
_node_operation_route
ativada também obtenham a opção_admin_route
.\Drupal::service('router.admin_context')->isAdminRoute()
verifica esse sinalizador para a rota atual por padrão.Respostas:
* Atualizada *
Quando eu respondi a essa pergunta, as páginas de edição de nó e edição de taxonomia não estavam definidas como rotas de administrador. Então eu adicionei verificações separadas para elas. Tais verificações separadas não são mais necessárias. O seguinte parece abordar muito bem:
Se você deseja verificar uma rota diferente da rota atual, pode passá-la para isAdminRoute ().
Observe que a maneira acima não funcionará para páginas de edição de nós ou páginas de edição de termos de taxonomia se você desmarcar "Usar o tema de administração ao editar ou criar conteúdo" na página de administração do tema em / admin / aparecimento. Então você precisaria de uma verificação separada.
* Resposta original: *
Para testar se uma página é uma página de administrador, você pode usar um processo de duas etapas. Como o regex para a edição do nó pode não estar usando o tema admin.
Primeiro eu uso o método isAdminRoute:
Em seguida, você pode usar uma verificação adicional para o caminho para ver se é uma página de edição de nó:
Aqui está uma maneira bastante elaborada, mas bastante completa, de testar páginas de edição de nós e termos de taxonomia, bem como outras rotas administrativas:
fonte
\Drupal::routeMatch()->getRouteName()
\Drupal::routeMatch()->getRouteName()
dá-me nulo (Drupal 8.3.2)A seguir, é um pouco mais conciso e também captura páginas de edição de nós quando elas são configuradas para usar o tema de administrador. O
isAdminRoute
método usa a rota atual se nenhuma for especificada:fonte