annotate core/modules/system/src/EventSubscriber/AdminRouteSubscriber.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 1fec387a4317
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\system\EventSubscriber;
Chris@0 4
Chris@0 5 use Drupal\Core\Routing\RouteSubscriberBase;
Chris@0 6 use Drupal\Core\Routing\RoutingEvents;
Chris@14 7 use Symfony\Component\Routing\Route;
Chris@0 8 use Symfony\Component\Routing\RouteCollection;
Chris@0 9
Chris@0 10 /**
Chris@14 11 * Adds the _admin_route option to each admin HTML route.
Chris@0 12 */
Chris@0 13 class AdminRouteSubscriber extends RouteSubscriberBase {
Chris@0 14
Chris@0 15 /**
Chris@0 16 * {@inheritdoc}
Chris@0 17 */
Chris@0 18 protected function alterRoutes(RouteCollection $collection) {
Chris@0 19 foreach ($collection->all() as $route) {
Chris@14 20 if (strpos($route->getPath(), '/admin') === 0 && !$route->hasOption('_admin_route') && static::isHtmlRoute($route)) {
Chris@0 21 $route->setOption('_admin_route', TRUE);
Chris@0 22 }
Chris@0 23 }
Chris@0 24 }
Chris@0 25
Chris@0 26 /**
Chris@0 27 * {@inheritdoc}
Chris@0 28 */
Chris@0 29 public static function getSubscribedEvents() {
Chris@0 30 $events = parent::getSubscribedEvents();
Chris@0 31
Chris@0 32 // Use a lower priority than \Drupal\field_ui\Routing\RouteSubscriber or
Chris@0 33 // \Drupal\views\EventSubscriber\RouteSubscriber to ensure we add the option
Chris@0 34 // to their routes.
Chris@0 35 $events[RoutingEvents::ALTER] = ['onAlterRoutes', -200];
Chris@0 36
Chris@0 37 return $events;
Chris@0 38 }
Chris@0 39
Chris@14 40 /**
Chris@14 41 * Determines whether the given route is a HTML route.
Chris@14 42 *
Chris@14 43 * @param \Symfony\Component\Routing\Route $route
Chris@14 44 * The route to analyze.
Chris@14 45 *
Chris@14 46 * @return bool
Chris@14 47 * TRUE if HTML is a valid format for this route.
Chris@14 48 */
Chris@14 49 protected static function isHtmlRoute(Route $route) {
Chris@14 50 // If a route has no explicit format, then HTML is valid.
Chris@14 51 $format = $route->hasRequirement('_format') ? explode('|', $route->getRequirement('_format')) : ['html'];
Chris@14 52 return in_array('html', $format, TRUE);
Chris@14 53 }
Chris@14 54
Chris@0 55 }