Irgendwann habe ich angefangen, den folgenden Code zu verwenden, um zu testen, ob die aktuelle Seite eine Administrationsseite ist:
$route = \Drupal::routeMatch()->getRouteObject();
$is_admin = \Drupal::service('router.admin_context')->isAdminRoute($route);
Ich habe jedoch festgestellt, dass dies auf Knotenbearbeitungsseiten in hook_entity_load () fehlschlägt.
Wie testen wir, ob wir uns in Drupal 8 auf einer Administrationsseite befinden? So etwas wie path_is_admin () in Drupal 7?
Ich habe festgestellt, dass, wenn ich denselben Knotenbearbeitungsseitenpfad von außerhalb von hook_entity_load teste, der Code auf dieser Seite verwendet wird ( https://api.drupal.org/api/drupal/includes%21path.inc/function/path_is_admin/7.x) ) Es klappt.
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);
Wenn ich jedoch versuche, diesen Code unter Verwendung des aktuellen Pfads in hook_entity_load hinzuzufügen, wird eine schwerwiegende Schleife angezeigt.
Ich denke, wo ich feststecke, wird die aktuelle Route in hook_entity_load geladen.
_node_operation_route
aktivierter Option auch die Option_admin_route
.\Drupal::service('router.admin_context')->isAdminRoute()
Überprüft dieses Flag standardmäßig auf die aktuelle Route.Antworten:
* Aktualisiert *
Als ich diese Frage zum ersten Mal beantwortete, wurden die Seiten zum Bearbeiten von Knoten und zum Bearbeiten von Taxonomien nicht als Administratorrouten festgelegt. Also habe ich separate Schecks für diese hinzugefügt. Solche separaten Prüfungen sind nicht mehr erforderlich. Folgendes scheint es ziemlich gut abzudecken:
Wenn Sie eine andere Route als die aktuelle Route überprüfen möchten, können Sie sie an isAdminRoute () übergeben.
Beachten Sie, dass die oben beschriebene Methode nicht für Knotenbearbeitungsseiten oder Seiten zum Bearbeiten von Taxonomiebegriffen funktioniert, wenn Sie auf der Themenadministrationsseite unter / admin / Erscheinungsbild die Option "Verwaltungsthema beim Bearbeiten oder Erstellen von Inhalten verwenden" deaktivieren. Dann brauchen Sie einen separaten Scheck.
* Ursprüngliche Antwort: *
Um zu testen, ob eine Seite eine Administrationsseite ist, können Sie einen zweistufigen Prozess verwenden. Da Regex für die Knotenbearbeitung möglicherweise nicht das Admin-Design verwendet.
Zuerst benutze ich die isAdminRoute-Methode:
Anschließend können Sie den Pfad zusätzlich überprüfen, um festzustellen, ob es sich um eine Knotenbearbeitungsseite handelt:
Hier ist eine ziemlich ausgefeilte, aber ziemlich vollständige Methode zum Testen der Bearbeitungsseiten für Knoten- und Taxonomiebegriffe sowie anderer Administratorrouten:
quelle
\Drupal::routeMatch()->getRouteName()
\Drupal::routeMatch()->getRouteName()
gibt mir null (Drupal 8.3.2)Das Folgende ist etwas prägnanter und erfasst auch Knotenbearbeitungsseiten, wenn sie für die Verwendung des Admin-Themas konfiguriert sind. Die
isAdminRoute
Methode verwendet die aktuelle Route, wenn keine angegeben ist:quelle