W pewnym momencie zacząłem używać następującego kodu, aby sprawdzić, czy bieżąca strona jest stroną administracyjną:
$route = \Drupal::routeMatch()->getRouteObject();
$is_admin = \Drupal::service('router.admin_context')->isAdminRoute($route);
Ale odkryłem, że to się nie udaje na stronach edycji węzłów w hook_entity_load ().
Jak sprawdzamy, czy jesteśmy na stronie administratora w Drupal 8? Coś jak path_is_admin () w Drupal 7?
Odkryłem, że jeśli przetestuję tę samą ścieżkę edycji strony węzła z zewnątrz hook_entity_load, używając kodu na tej stronie ( https://api.drupal.org/api/drupal/includes%21path.inc/function/path_is_admin/7.x ) to działa.
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);
Ale jeśli spróbuję dodać ten kod do hook_entity_load przy użyciu bieżącej ścieżki, otrzymam krytyczną pętlę.
Myślę, że gdzie utknąłem, ładuję bieżącą trasę do hook_entity_load.
_node_operation_route
włączoną opcją również mają tę opcję_admin_route
.\Drupal::service('router.admin_context')->isAdminRoute()
domyślnie sprawdza tę flagę dla bieżącej trasy.Odpowiedzi:
* Zaktualizowano *
Kiedy po raz pierwszy odpowiedziałem na to pytanie, strony edycji węzłów i edycji taksonomii nie były ustawione jako trasy administracyjne. Dodałem więc osobne kontrole dla nich. Takie oddzielne kontrole nie są już konieczne. Wydaje się, że dość dobrze obejmuje to:
Jeśli chcesz sprawdzić trasę inną niż bieżąca, możesz przekazać ją do isAdminRoute ().
Uwaga: powyższy sposób nie będzie działał dla stron edycji węzłów lub stron edycji terminów, jeśli odznaczysz opcję „Użyj motywu administracyjnego podczas edytowania lub tworzenia treści” na stronie administratora motywu w / admin / wygląd. Wtedy potrzebujesz osobnego czeku.
* Oryginalna odpowiedź: *
Aby sprawdzić, czy strona jest stroną administracyjną, możesz skorzystać z dwuetapowego procesu. Ponieważ wyrażenie regularne dla edycji węzła może nie używać motywu administratora.
Najpierw używam metody isAdminRoute:
Następnie możesz użyć dodatkowego sprawdzenia ścieżki, aby zobaczyć, czy jest to strona edycji węzła:
Oto dość skomplikowany, ale całkiem kompletny sposób na przetestowanie stron edycji terminów węzłów i taksonomii, a także innych dróg administracyjnych:
źródło
\Drupal::routeMatch()->getRouteName()
\Drupal::routeMatch()->getRouteName()
daje mi null (Drupal 8.3.2)Poniższe jest nieco bardziej zwięzłe, a także przechwytuje strony edycji węzłów, gdy są skonfigurowane do korzystania z motywu administratora.
isAdminRoute
Metoda wykorzystuje aktualnej trasie, jeżeli nie zostały podane:źródło