En algún momento comencé a usar el siguiente código para probar si la página actual es una página de administración:
$route = \Drupal::routeMatch()->getRouteObject();
$is_admin = \Drupal::service('router.admin_context')->isAdminRoute($route);
Pero descubrí que esto falla en las páginas de edición de nodos en hook_entity_load ().
¿Cómo probamos si estamos en una página de administrador en Drupal 8? ¿Algo así como path_is_admin () en Drupal 7?
Descubrí que si pruebo la misma ruta de la página de edición de nodos desde fuera de hook_entity_load, usando el código de esta 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);
Pero si trato de agregar este código en hook_entity_load usando la ruta actual, me sale un bucle fatal.
Creo que donde estoy atascado está cargando la ruta actual en hook_entity_load.
_node_operation_route
habilitada también obtengan la opción_admin_route
.\Drupal::service('router.admin_context')->isAdminRoute()
comprueba esa bandera para la ruta actual de forma predeterminada.Respuestas:
* Actualizado *
Cuando respondí por primera vez a esta pregunta, las páginas de edición de nodo y edición de taxonomía no se configuraron como rutas de administración. Así que agregué cheques separados para esos. Tales controles separados ya no son necesarios. Lo siguiente parece cubrirlo bastante bien:
Si desea verificar una ruta que no sea la ruta actual, puede pasarla a isAdminRoute ().
Tenga en cuenta que la forma anterior no funcionará para páginas de edición de nodos o páginas de edición de términos de taxonomía si desmarca "Usar el tema de administración al editar o crear contenido" en la página de administración del tema en / admin / apariencia. Entonces necesitarías un cheque por separado.
* Respuesta original: *
Para probar si una página es una página de administrador, puede usar un proceso de dos pasos. Dado que regex para la edición de nodos puede no estar usando el tema de administración.
Primero uso el método isAdminRoute:
Luego puede usar una verificación adicional de la ruta para ver si se trata de una página de edición de nodos:
Aquí hay una forma bastante elaborada pero bastante completa de probar páginas de edición de términos de nodo y taxonomía, así como otras rutas de administración:
fuente
\Drupal::routeMatch()->getRouteName()
\Drupal::routeMatch()->getRouteName()
me da nulo (Drupal 8.3.2)Lo siguiente es un poco más conciso, y también captura páginas de edición de nodos cuando están configuradas para usar el tema de administración. El
isAdminRoute
método usa la ruta actual si no se especifica ninguno:fuente