1<?php 2 3namespace Drupal\node\EventSubscriber; 4 5use Drupal\Core\Config\ConfigCrudEvent; 6use Drupal\Core\Config\ConfigEvents; 7use Drupal\Core\Config\ConfigFactoryInterface; 8use Drupal\Core\Routing\RouteBuilderInterface; 9use Drupal\Core\Routing\RouteSubscriberBase; 10use Symfony\Component\Routing\RouteCollection; 11 12/** 13 * Sets the _admin_route for specific node-related routes. 14 */ 15class NodeAdminRouteSubscriber extends RouteSubscriberBase { 16 17 /** 18 * The config factory. 19 * 20 * @var \Drupal\Core\Config\ConfigFactoryInterface 21 */ 22 protected $configFactory; 23 24 /** 25 * The router builder. 26 * 27 * @var \Drupal\Core\Routing\RouteBuilderInterface 28 */ 29 protected $routerBuilder; 30 31 /** 32 * Constructs a new NodeAdminRouteSubscriber. 33 * 34 * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory 35 * The config factory. 36 * @param \Drupal\Core\Routing\RouteBuilderInterface $router_builder 37 * The router builder service. 38 */ 39 public function __construct(ConfigFactoryInterface $config_factory, RouteBuilderInterface $router_builder) { 40 $this->configFactory = $config_factory; 41 $this->routerBuilder = $router_builder; 42 } 43 44 /** 45 * {@inheritdoc} 46 */ 47 protected function alterRoutes(RouteCollection $collection) { 48 if ($this->configFactory->get('node.settings')->get('use_admin_theme')) { 49 foreach ($collection->all() as $route) { 50 if ($route->hasOption('_node_operation_route')) { 51 $route->setOption('_admin_route', TRUE); 52 } 53 } 54 } 55 } 56 57 /** 58 * Rebuilds the router when node.settings:use_admin_theme is changed. 59 * 60 * @param \Drupal\Core\Config\ConfigCrudEvent $event 61 */ 62 public function onConfigSave(ConfigCrudEvent $event) { 63 if ($event->getConfig()->getName() === 'node.settings' && $event->isChanged('use_admin_theme')) { 64 $this->routerBuilder->setRebuildNeeded(); 65 } 66 } 67 68 /** 69 * {@inheritdoc} 70 */ 71 public static function getSubscribedEvents() { 72 $events = parent::getSubscribedEvents(); 73 $events[ConfigEvents::SAVE][] = ['onConfigSave', 0]; 74 return $events; 75 } 76 77} 78