diff --git a/core/core.services.yml b/core/core.services.yml index 20b8651..3a546ee 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -205,6 +205,10 @@ services: request: class: Symfony\Component\HttpFoundation\Request synthetic: true + request_info: + class: Drupal\Core\Routing\RequestInfo + calls: + - [setRequest, ['@?request=']] event_dispatcher: class: Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher arguments: ['@service_container'] @@ -389,7 +393,7 @@ services: arguments: ['@http_kernel', '@controller_resolver', '@string_translation', '@title_resolver'] controller.dialog: class: Drupal\Core\Controller\DialogController - arguments: ['@http_kernel', '@title_resolver'] + arguments: ['@http_kernel', '@title_resolver', '@request_info'] router_listener: class: Symfony\Component\HttpKernel\EventListener\RouterListener tags: diff --git a/core/includes/menu.inc b/core/includes/menu.inc index a8a30b6..f7432f7 100644 --- a/core/includes/menu.inc +++ b/core/includes/menu.inc @@ -1303,7 +1303,7 @@ function menu_tree_page_data($menu_name, $max_depth = NULL, $only_active_trail = // Load the router item corresponding to the current page. $request = \Drupal::request(); $system_path = NULL; - if ($route_name = $request->attributes->get(RouteObjectInterface::ROUTE_NAME)) { + if ($route_name = \Drupal::service('request_info')->getRouteName()) { // @todo https://drupal.org/node/2068471 is adding support so we can tell // if this is called on a 404/403 page. $system_path = $request->attributes->get('_system_path'); @@ -1973,7 +1973,7 @@ function menu_local_tasks($level = 0) { $data['tabs'] = array(); $data['actions'] = array(); - $route_name = \Drupal::request()->attributes->get(RouteObjectInterface::ROUTE_NAME); + $route_name = \Drupal::service('request_info')->getRouteName(); if (!empty($route_name)) { $manager = \Drupal::service('plugin.manager.menu.local_task'); $local_tasks = $manager->getTasksBuild($route_name); @@ -2208,7 +2208,7 @@ function menu_secondary_local_tasks() { */ function menu_get_local_actions() { $links = menu_local_tasks(); - $route_name = Drupal::request()->attributes->get(RouteObjectInterface::ROUTE_NAME); + $route_name = \Drupal::service('request_info')->getRouteName(); $manager = \Drupal::service('plugin.manager.menu.local_action'); return $manager->getActionsForRoute($route_name) + $links['actions']; } diff --git a/core/lib/Drupal/Core/Controller/DialogController.php b/core/lib/Drupal/Core/Controller/DialogController.php index 7bb34ff..b1d2a51 100644 --- a/core/lib/Drupal/Core/Controller/DialogController.php +++ b/core/lib/Drupal/Core/Controller/DialogController.php @@ -9,7 +9,7 @@ use Drupal\Core\Ajax\AjaxResponse; use Drupal\Core\Ajax\OpenDialogCommand; -use Symfony\Cmf\Component\Routing\RouteObjectInterface; +use Drupal\Core\Routing\RequestInfo; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\HttpKernelInterface; @@ -33,16 +33,26 @@ class DialogController { protected $titleResolver; /** + * The request info. + * + * @var \Drupal\Core\Routing\RequestInfo + */ + protected $requestInfo; + + /** * Constructs a new DialogController. * * @param \Symfony\Component\HttpKernel\HttpKernelInterface $kernel * The kernel. * @param \Drupal\Core\Controller\TitleResolverInterface $title_resolver * The title resolver. + * @param \Drupal\Core\Routing\RequestInfo $request_info + * The request info. */ - public function __construct(HttpKernelInterface $kernel, TitleResolverInterface $title_resolver) { + public function __construct(HttpKernelInterface $kernel, TitleResolverInterface $title_resolver, RequestInfo $request_info) { $this->httpKernel = $kernel; $this->titleResolver = $title_resolver; + $this->requestInfo = $request_info; } /** @@ -104,7 +114,8 @@ public function dialog(Request $request, $modal = FALSE) { $subrequest = $this->forward($request); if ($subrequest->isOk()) { $content = $subrequest->getContent(); - if (!$title = $this->titleResolver->getTitle($request, $request->attributes->get(RouteObjectInterface::ROUTE_OBJECT))) { + $this->requestInfo->setRequest($request); + if (!$title = $this->titleResolver->getTitle($request, $this->requestInfo->getRouteObject())) { // @todo Remove use of drupal_get_title() when // http://drupal.org/node/1871596 is in. $title = drupal_get_title(); @@ -133,7 +144,7 @@ public function dialog(Request $request, $modal = FALSE) { } else { // Generate a target based on the route id. - $route_name = $request->attributes->get(RouteObjectInterface::ROUTE_NAME); + $route_name = $this->requestInfo->getRouteName(); $target = '#' . drupal_html_id("drupal-dialog-$route_name"); } } diff --git a/core/lib/Drupal/Core/Routing/RequestInfo.php b/core/lib/Drupal/Core/Routing/RequestInfo.php new file mode 100644 index 0000000..e67980a --- /dev/null +++ b/core/lib/Drupal/Core/Routing/RequestInfo.php @@ -0,0 +1,72 @@ +request = $request; + } + + /** + * Gets the current request. + * + * @return \Symfony\Component\HttpFoundation\Request + */ + public function getRequest() { + if (!$this->request) { + $this->setRequest(\Drupal::request()); + } + return $this->request; + } + + /** + * Get the route name. + * + * @return string + */ + public function getRouteName() { + return $this->getRequest()->attributes->get(RouteObjectInterface::ROUTE_NAME); + } + + /** + * Get the route object. + * + * @return \Symfony\Component\Routing\Route + */ + public function getRouteObject() { + return $this->getRequest()->attributes->get(RouteObjectInterface::ROUTE_OBJECT); + } + + /** + * Gets the internal path. + */ + public function getSystemPath() { + return $this->getRequest()->attributes->get('_system_path'); + } + +} diff --git a/core/modules/block/block.module b/core/modules/block/block.module index e1bc631..df923cc 100644 --- a/core/modules/block/block.module +++ b/core/modules/block/block.module @@ -157,7 +157,7 @@ function block_page_build(&$page) { // Fetch a list of regions for the current theme. $all_regions = system_region_list($theme); - if (\Drupal::request()->attributes->get(RouteObjectInterface::ROUTE_NAME) != 'block.admin_demo') { + if (\Drupal::service('request_info')->getRouteName() != 'block.admin_demo') { // Load all region content assigned via blocks. foreach (array_keys($all_regions) as $region) { // Assign blocks to region.