AdminRouteSubscriber.php

Same filename in other branches
  1. 9 core/modules/system/src/EventSubscriber/AdminRouteSubscriber.php
  2. 8.9.x core/modules/system/src/EventSubscriber/AdminRouteSubscriber.php
  3. 11.x core/modules/system/src/EventSubscriber/AdminRouteSubscriber.php

Namespace

Drupal\system\EventSubscriber

File

core/modules/system/src/EventSubscriber/AdminRouteSubscriber.php

View source
<?php

namespace Drupal\system\EventSubscriber;

use Drupal\Core\Routing\RouteSubscriberBase;
use Drupal\Core\Routing\RoutingEvents;
use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouteCollection;

/**
 * Adds the _admin_route option to each admin HTML route.
 */
class AdminRouteSubscriber extends RouteSubscriberBase {
    
    /**
     * {@inheritdoc}
     */
    protected function alterRoutes(RouteCollection $collection) {
        foreach ($collection->all() as $route) {
            $path = $route->getPath();
            if (($path == '/admin' || str_starts_with($path, '/admin/')) && !$route->hasOption('_admin_route') && static::isHtmlRoute($route)) {
                $route->setOption('_admin_route', TRUE);
            }
        }
    }
    
    /**
     * {@inheritdoc}
     */
    public static function getSubscribedEvents() : array {
        $events = parent::getSubscribedEvents();
        // Use a lower priority than \Drupal\field_ui\Routing\RouteSubscriber or
        // \Drupal\views\EventSubscriber\RouteSubscriber to ensure we add the option
        // to their routes.
        $events[RoutingEvents::ALTER] = [
            'onAlterRoutes',
            -200,
        ];
        return $events;
    }
    
    /**
     * Determines whether the given route is an HTML route.
     *
     * @param \Symfony\Component\Routing\Route $route
     *   The route to analyze.
     *
     * @return bool
     *   TRUE if HTML is a valid format for this route.
     */
    protected static function isHtmlRoute(Route $route) {
        // If a route has no explicit format, then HTML is valid.
        $format = $route->hasRequirement('_format') ? explode('|', $route->getRequirement('_format')) : [
            'html',
        ];
        return in_array('html', $format, TRUE);
    }

}

Classes

Title Deprecated Summary
AdminRouteSubscriber Adds the _admin_route option to each admin HTML route.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.