diff --git a/core/modules/views/src/Plugin/views/display/DisplayRouterInterface.php b/core/modules/views/src/Plugin/views/display/DisplayRouterInterface.php index 6223c52..e0bc92f 100644 --- a/core/modules/views/src/Plugin/views/display/DisplayRouterInterface.php +++ b/core/modules/views/src/Plugin/views/display/DisplayRouterInterface.php @@ -46,4 +46,12 @@ public function alterRoutes(RouteCollection $collection); */ public function getUrlInfo(); + /** + * Returns the route name for the display. + * + * @return string + * The name of the route + */ + public function getRouteName(); + } diff --git a/core/modules/views/src/Plugin/views/display/PathPluginBase.php b/core/modules/views/src/Plugin/views/display/PathPluginBase.php index 7738933..075bbc5 100644 --- a/core/modules/views/src/Plugin/views/display/PathPluginBase.php +++ b/core/modules/views/src/Plugin/views/display/PathPluginBase.php @@ -490,11 +490,20 @@ public function validate() { * {@inheritdoc} */ public function getUrlInfo() { - if (strpos($this->getOption('path'), '%') !== FALSE) { - throw new \InvalidArgumentException('No placeholders supported yet.'); - } - - return Url::fromRoute($this->getRoute($this->view->storage->id(), $this->display['id'])); + return Url::fromRoute($this->getRouteName()); } + /** + * {@inheritdoc} + */ + public function getRouteName() { + $view_id = $this->view->storage->id(); + $display_id = $this->display['id']; + $view_route_key = "$view_id.$display_id"; + + // Check for overridden route names. + $view_route_names = $this->state->get('views.view_route_names') ?: array(); + + return (isset($view_route_names[$view_route_key]) ? $view_route_names[$view_route_key] : "views.$view_route_name"); + } } diff --git a/core/modules/views/tests/src/Unit/Plugin/area/ResultTest.php b/core/modules/views/tests/src/Unit/Plugin/area/ResultTest.php index a289d8e..87c79a3d 100644 --- a/core/modules/views/tests/src/Unit/Plugin/area/ResultTest.php +++ b/core/modules/views/tests/src/Unit/Plugin/area/ResultTest.php @@ -46,7 +46,8 @@ protected function setUp() { $views_data = $this->getMockBuilder('Drupal\views\ViewsData') ->disableOriginalConstructor() ->getMock(); - $this->view = new ViewExecutable($storage, $user, $views_data); + $route_provider = $this->getMock('Drupal\Core\Routing\RouteProviderInterface'); + $this->view = new ViewExecutable($storage, $user, $views_data, $route_provider); $this->resultHandler = new Result(array(), 'result', array()); $this->resultHandler->view = $this->view; diff --git a/core/modules/views/tests/src/Unit/Plugin/field/CounterTest.php b/core/modules/views/tests/src/Unit/Plugin/field/CounterTest.php index 959ce3d..7b0c14d 100644 --- a/core/modules/views/tests/src/Unit/Plugin/field/CounterTest.php +++ b/core/modules/views/tests/src/Unit/Plugin/field/CounterTest.php @@ -75,7 +75,8 @@ protected function setUp() { $views_data = $this->getMockBuilder('Drupal\views\ViewsData') ->disableOriginalConstructor() ->getMock(); - $this->view = $this->getMock('Drupal\views\ViewExecutable', NULL, array($storage, $user, $views_data)); + $route_provider = $this->getMock('Drupal\Core\Routing\RouteProviderInterface'); + $this->view = $this->getMock('Drupal\views\ViewExecutable', NULL, array($storage, $user, $views_data, $route_provider)); $this->display = $this->getMockBuilder('Drupal\views\Plugin\views\display\DisplayPluginBase') ->disableOriginalConstructor() diff --git a/core/modules/views/tests/src/Unit/ViewsTest.php b/core/modules/views/tests/src/Unit/ViewsTest.php index ab9bdf8..aa7a8c9 100644 --- a/core/modules/views/tests/src/Unit/ViewsTest.php +++ b/core/modules/views/tests/src/Unit/ViewsTest.php @@ -34,7 +34,8 @@ protected function setUp() { $views_data = $this->getMockBuilder('Drupal\views\ViewsData') ->disableOriginalConstructor() ->getMock(); - $container->set('views.executable', new ViewExecutableFactory($user, $request_stack, $views_data)); + $route_provider = $this->getMock('Drupal\Core\Routing\RouteProviderInterface'); + $container->set('views.executable', new ViewExecutableFactory($user, $request_stack, $views_data, $route_provider)); $this->view = new View(array('id' => 'test_view'), 'view'); diff --git a/core/modules/views_ui/tests/src/Unit/ViewListBuilderTest.php b/core/modules/views_ui/tests/src/Unit/ViewListBuilderTest.php index b77f595..a42a879 100644 --- a/core/modules/views_ui/tests/src/Unit/ViewListBuilderTest.php +++ b/core/modules/views_ui/tests/src/Unit/ViewListBuilderTest.php @@ -125,7 +125,8 @@ public function testBuildRowEntityList() { $views_data = $this->getMockBuilder('Drupal\views\ViewsData') ->disableOriginalConstructor() ->getMock(); - $executable_factory = new ViewExecutableFactory($user, $request_stack, $views_data); + $route_provider = $this->getMock('Drupal\Core\Routing\RouteProviderInterface'); + $executable_factory = new ViewExecutableFactory($user, $request_stack, $views_data, $route_provider); $container->set('views.executable', $executable_factory); $container->set('plugin.manager.views.display', $display_manager); \Drupal::setContainer($container);