diff --git a/core/core.services.yml b/core/core.services.yml index 3136bac..abcbac8 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -282,8 +282,8 @@ services: tags: - { name: route_enhancer, priority: 20 } - { name: legacy_route_enhancer, priority: 20 } - route_enhancer.entity_form: - class: Drupal\Core\Entity\Enhancer\EntityFormEnhancer + route_enhancer.entity: + class: Drupal\Core\Entity\Enhancer\EntityRouteEnhancer arguments: ['@content_negotiation'] tags: - { name: route_enhancer, priority: 15 } diff --git a/core/lib/Drupal/Core/Entity/Controller/EntityListController.php b/core/lib/Drupal/Core/Entity/Controller/EntityListController.php index 4984bb0..0240923 100644 --- a/core/lib/Drupal/Core/Entity/Controller/EntityListController.php +++ b/core/lib/Drupal/Core/Entity/Controller/EntityListController.php @@ -45,6 +45,9 @@ public static function create(ContainerInterface $container) { /** * Provides the listing page for any entity type. * + * @param string $entity_type + * The entity type to render. + * * @return array * A render array as expected by drupal_render(). */ @@ -53,3 +56,4 @@ public function listing($entity_type) { } } + diff --git a/core/lib/Drupal/Core/Entity/Enhancer/EntityFormEnhancer.php b/core/lib/Drupal/Core/Entity/Enhancer/EntityFormEnhancer.php deleted file mode 100644 index b6739e0..0000000 --- a/core/lib/Drupal/Core/Entity/Enhancer/EntityFormEnhancer.php +++ /dev/null @@ -1,46 +0,0 @@ -negotiation = $negotiation; - } - - /** - * {@inheritdoc} - */ - public function enhance(array $defaults, Request $request) { - if (empty($defaults['_controller']) && !empty($defaults['_entity_form']) && $this->negotiation->getContentType($request) === 'html') { - $defaults['_controller'] = '\Drupal\Core\Entity\HtmlEntityFormController::content'; - } - return $defaults; - } - -} diff --git a/core/lib/Drupal/Core/Entity/Enhancer/EntityRouteEnhancer.php b/core/lib/Drupal/Core/Entity/Enhancer/EntityRouteEnhancer.php new file mode 100644 index 0000000..f2f6648 --- /dev/null +++ b/core/lib/Drupal/Core/Entity/Enhancer/EntityRouteEnhancer.php @@ -0,0 +1,54 @@ +negotiation = $negotiation; + } + + /** + * {@inheritdoc} + */ + public function enhance(array $defaults, Request $request) { + if (empty($defaults['_controller']) && $this->negotiation->getContentType($request) === 'html') { + if (!empty($defaults['_entity_form'])) { + $defaults['_controller'] = '\Drupal\Core\Entity\HtmlEntityFormController::content'; + } + elseif (!empty($defaults['_entity_list'])) { + $defaults['_controller'] = 'controller.page:content'; + $defaults['_content'] = '\Drupal\Core\Entity\Controller\EntityListController::listing'; + $defaults['entity_type'] = $defaults['_entity_list']; + unset($defaults['_entity_list']); + } + } + return $defaults; + } + +} diff --git a/core/modules/block/custom_block/custom_block.routing.yml b/core/modules/block/custom_block/custom_block.routing.yml index ac4ec99..cfe79c7 100644 --- a/core/modules/block/custom_block/custom_block.routing.yml +++ b/core/modules/block/custom_block/custom_block.routing.yml @@ -1,8 +1,7 @@ custom_block_type_list: pattern: '/admin/structure/custom-blocks' defaults: - _content: '\Drupal\Core\Entity\Controller\EntityListController::listing' - entity_type: 'custom_block_type' + _entity_list: 'custom_block_type' requirements: _permission: 'administer blocks' diff --git a/core/modules/config/tests/config_test/config_test.routing.yml b/core/modules/config/tests/config_test/config_test.routing.yml index d939b30..b5cfff6 100644 --- a/core/modules/config/tests/config_test/config_test.routing.yml +++ b/core/modules/config/tests/config_test/config_test.routing.yml @@ -1,7 +1,6 @@ config_test_list_page: pattern: '/admin/structure/config_test' defaults: - _content: '\Drupal\Core\Entity\Controller\EntityListController::listing' - entity_type: 'config_test' + _entity_list: 'config_test' requirements: _access: 'TRUE' diff --git a/core/modules/contact/contact.routing.yml b/core/modules/contact/contact.routing.yml index b46305b..fb5ce93 100644 --- a/core/modules/contact/contact.routing.yml +++ b/core/modules/contact/contact.routing.yml @@ -8,8 +8,7 @@ contact_category_delete: contact_category_list: pattern: '/admin/structure/contact' defaults: - _content: '\Drupal\Core\Entity\Controller\EntityListController::listing' - entity_type: 'contact_category' + _entity_list: 'contact_category' requirements: _permission: 'administer contact forms' diff --git a/core/modules/picture/picture.routing.yml b/core/modules/picture/picture.routing.yml index 408dd33..66a3689 100644 --- a/core/modules/picture/picture.routing.yml +++ b/core/modules/picture/picture.routing.yml @@ -1,8 +1,7 @@ picture_mapping_page: pattern: '/admin/config/media/picturemapping' defaults: - _content: '\Drupal\Core\Entity\Controller\EntityListController::listing' - entity_type: 'picture_mapping' + _entity_list: 'picture_mapping' requirements: _permission: 'administer pictures' diff --git a/core/modules/user/user.routing.yml b/core/modules/user/user.routing.yml index fb49de3..0a7531d 100644 --- a/core/modules/user/user.routing.yml +++ b/core/modules/user/user.routing.yml @@ -36,8 +36,7 @@ user_account_settings: user_role_list: pattern: '/admin/people/roles' defaults: - _content: '\Drupal\Core\Entity\Controller\EntityListController::listing' - entity_type: 'user_role' + _entity_list: 'user_role' requirements: _permission: 'administer permissions' diff --git a/core/modules/views_ui/lib/Drupal/views_ui/Routing/ViewsUIController.php b/core/modules/views_ui/lib/Drupal/views_ui/Routing/ViewsUIController.php index 472b460..01d43f3 100644 --- a/core/modules/views_ui/lib/Drupal/views_ui/Routing/ViewsUIController.php +++ b/core/modules/views_ui/lib/Drupal/views_ui/Routing/ViewsUIController.php @@ -76,16 +76,6 @@ public static function create(ContainerInterface $container) { } /** - * Lists all of the views. - * - * @return array - * The Views listing page. - */ - public function listing() { - return $this->entityManager->getListController('view')->render(); - } - - /** * Lists all instances of fields on any views. * * @return array diff --git a/core/modules/views_ui/views_ui.routing.yml b/core/modules/views_ui/views_ui.routing.yml index f2046f6..772cc32 100644 --- a/core/modules/views_ui/views_ui.routing.yml +++ b/core/modules/views_ui/views_ui.routing.yml @@ -1,7 +1,7 @@ views_ui.list: pattern: '/admin/structure/views' defaults: - _controller: '\Drupal\views_ui\Routing\ViewsUIController::listing' + _entity_list: 'view' requirements: _permission: 'administer views' diff --git a/core/tests/Drupal/Tests/Core/Entity/Enhancer/EntityRouteEnhancerTest.php b/core/tests/Drupal/Tests/Core/Entity/Enhancer/EntityRouteEnhancerTest.php new file mode 100644 index 0000000..ffd60a1 --- /dev/null +++ b/core/tests/Drupal/Tests/Core/Entity/Enhancer/EntityRouteEnhancerTest.php @@ -0,0 +1,67 @@ + 'Entity route enhancer test', + 'description' => 'Tests the entity route enhancer.', + 'group' => 'Entity' + ); + } + + /** + * Tests the enhancer method. + * + * @see \Drupal\Core\Entity\Enhancer\EntityRouteEnhancer::enhancer() + */ + public function testEnhancer() { + $negotation = $this->getMock('Drupal\core\ContentNegotiation', array('getContentType')); + $negotation->expects($this->any()) + ->method('getContentType') + ->will($this->returnValue('html')); + + $route_enhancer = new EntityRouteEnhancer($negotation); + + // Set a controller to ensure it is not overridden. + $request = new Request(); + $defaults = array(); + $defaults['_controller'] = 'Drupal\Tests\Core\Controller\TestController::content'; + $defaults['_entity_form'] = 'entity_test.default'; + $new_defaults = $route_enhancer->enhance($defaults, $request); + $this->assertEquals($defaults, $new_defaults, '_controller got overridden.'); + + // Set _entity_form and ensure that the form controller is set. + $defaults = array(); + $defaults['_entity_form'] = 'entity_test.default'; + $defaults = $route_enhancer->enhance($defaults, $request); + $this->assertEquals('\Drupal\Core\Entity\HtmlEntityFormController::content', $defaults['_controller'], 'The entity form controller was not set.'); + + // Set _entity_list and ensure that the entity list controller is set. + $defaults = array(); + $defaults['_entity_list'] = 'entity_test.default'; + $defaults = $route_enhancer->enhance($defaults, $request); + $this->assertEquals('controller.page:content', $defaults['_controller']); + $this->assertEquals('\Drupal\Core\Entity\Controller\EntityListController::listing', $defaults['_content'], 'The entity list controller was not set.'); + $this->assertEquals('entity_test.default', $defaults['entity_type']); + $this->assertFalse(isset($defaults['_entity_list'])); + } + +}