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 }
|