diff --git a/core/lib/Drupal/Core/Entity/Routing/DefaultHtmlRouteProvider.php b/core/lib/Drupal/Core/Entity/Routing/DefaultHtmlRouteProvider.php index 00b5590..6a8ed39 100644 --- a/core/lib/Drupal/Core/Entity/Routing/DefaultHtmlRouteProvider.php +++ b/core/lib/Drupal/Core/Entity/Routing/DefaultHtmlRouteProvider.php @@ -10,6 +10,7 @@ use Drupal\Core\Entity\EntityHandlerInterface; use Drupal\Core\Entity\EntityManagerInterface; use Drupal\Core\Entity\EntityTypeInterface; +use Drupal\Core\Entity\FieldableEntityInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\Routing\Route; use Symfony\Component\Routing\RouteCollection; @@ -185,12 +186,17 @@ protected function getDeleteFormRoute(EntityTypeInterface $entity_type) { * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * An entity type. * - * @return string - * The type of the ID key for a given entity type. + * @return string|null + * The type of the ID key for a given entity type, or NULL if the entity + * type does not support fields. */ protected function getEntityTypeIdKeyType(EntityTypeInterface $entity_type) { - $field_storage_definition = $this->entityManager->getFieldStorageDefinitions($entity_type->id()); - return $field_storage_definition[$entity_type->getKey('id')]->getType(); + if (!$entity_type->isSubclassOf(FieldableEntityInterface::class)) { + return NULL; + } + + $field_storage_definitions = $this->entityManager->getFieldStorageDefinitions($entity_type->id()); + return $field_storage_definitions[$entity_type->getKey('id')]->getType(); } } diff --git a/core/modules/block_content/block_content.routing.yml b/core/modules/block_content/block_content.routing.yml index bfabdb9..75ea9b2 100644 --- a/core/modules/block_content/block_content.routing.yml +++ b/core/modules/block_content/block_content.routing.yml @@ -54,6 +54,7 @@ entity.block_content.edit_form: _admin_route: TRUE requirements: _entity_access: 'block_content.update' + block_content: \d+ entity.block_content.delete_form: path: '/block/{block_content}/delete' @@ -64,6 +65,7 @@ entity.block_content.delete_form: _admin_route: TRUE requirements: _entity_access: 'block_content.delete' + block_content: \d+ block_content.type_add: path: '/admin/structure/block/block-content/types/add' diff --git a/core/modules/book/book.routing.yml b/core/modules/book/book.routing.yml index 9b8f322..772a6cf 100644 --- a/core/modules/book/book.routing.yml +++ b/core/modules/book/book.routing.yml @@ -29,6 +29,7 @@ book.export: requirements: _permission: 'access printer-friendly version' _entity_access: 'node.view' + node: \d+ entity.node.book_outline_form: path: '/node/{node}/outline' @@ -38,6 +39,7 @@ entity.node.book_outline_form: requirements: _permission: 'administer book outlines' _entity_access: 'node.view' + node: \d+ options: _node_operation_route: TRUE @@ -62,3 +64,4 @@ entity.node.book_remove_form: _permission: 'administer book outlines' _entity_access: 'node.view' _access_book_removable: 'TRUE' + node: \d+ diff --git a/core/modules/comment/comment.routing.yml b/core/modules/comment/comment.routing.yml index 441477f..3d698b8 100644 --- a/core/modules/comment/comment.routing.yml +++ b/core/modules/comment/comment.routing.yml @@ -23,6 +23,7 @@ entity.comment.edit_form: _entity_form: 'comment.default' requirements: _entity_access: 'comment.update' + comment: \d+ comment.approve: path: '/comment/{comment}/approve' @@ -33,6 +34,7 @@ comment.approve: requirements: _entity_access: 'comment.approve' _csrf_token: 'TRUE' + comment: \d+ entity.comment.canonical: path: '/comment/{comment}' @@ -50,6 +52,7 @@ entity.comment.delete_form: _entity_form: 'comment.delete' requirements: _entity_access: 'comment.delete' + comment: \d+ comment.reply: path: '/comment/reply/{entity_type}/{entity}/{field_name}/{pid}' @@ -78,6 +81,7 @@ comment.node_redirect: requirements: _entity_access: 'node.view' _module_dependencies: 'node' + node: \d+ entity.comment_type.collection: path: '/admin/structure/comment' diff --git a/core/modules/contact/contact.routing.yml b/core/modules/contact/contact.routing.yml index d81bb9f..5977986 100644 --- a/core/modules/contact/contact.routing.yml +++ b/core/modules/contact/contact.routing.yml @@ -54,3 +54,4 @@ entity.user.contact_form: _controller: '\Drupal\contact\Controller\ContactController::contactPersonalPage' requirements: _access_contact_personal_tab: 'TRUE' + user: \d+ diff --git a/core/modules/history/history.routing.yml b/core/modules/history/history.routing.yml index f4db92a..ff01a7c 100644 --- a/core/modules/history/history.routing.yml +++ b/core/modules/history/history.routing.yml @@ -11,3 +11,4 @@ history.read_node: _controller: '\Drupal\history\Controller\HistoryController::readNode' requirements: _entity_access: 'node.view' + node: \d+ diff --git a/core/modules/node/node.routing.yml b/core/modules/node/node.routing.yml index 187e852..7c942a2 100644 --- a/core/modules/node/node.routing.yml +++ b/core/modules/node/node.routing.yml @@ -47,6 +47,7 @@ entity.node.version_history: _controller: '\Drupal\node\Controller\NodeController::revisionOverview' requirements: _access_node_revision: 'view' + node: \d+ options: _node_operation_route: TRUE @@ -57,6 +58,7 @@ entity.node.revision: _title_callback: '\Drupal\node\Controller\NodeController::revisionPageTitle' requirements: _access_node_revision: 'view' + node: \d+ node.revision_revert_confirm: path: '/node/{node}/revisions/{node_revision}/revert' @@ -65,6 +67,7 @@ node.revision_revert_confirm: _title: 'Revert to earlier revision' requirements: _access_node_revision: 'update' + node: \d+ options: _node_operation_route: TRUE @@ -75,6 +78,7 @@ node.revision_revert_translation_confirm: _title: 'Revert to earlier revision of a translation' requirements: _access_node_revision: 'update' + node: \d+ options: _node_operation_route: TRUE @@ -85,6 +89,7 @@ node.revision_delete_confirm: _title: 'Delete earlier revision' requirements: _access_node_revision: 'delete' + node: \d+ options: _node_operation_route: TRUE diff --git a/core/modules/node/src/Entity/NodeRouteProvider.php b/core/modules/node/src/Entity/NodeRouteProvider.php index 5013649..7bfc982 100644 --- a/core/modules/node/src/Entity/NodeRouteProvider.php +++ b/core/modules/node/src/Entity/NodeRouteProvider.php @@ -36,6 +36,7 @@ public function getRoutes( EntityTypeInterface $entity_type) { '_entity_form' => 'node.delete', '_title' => 'Delete', ]) + ->setRequirement('node', '\d+') ->setRequirement('_entity_access', 'node.delete') ->setOption('_node_operation_route', TRUE); $route_collection->add('entity.node.delete_form', $route); @@ -43,6 +44,7 @@ public function getRoutes( EntityTypeInterface $entity_type) { $route = (new Route('/node/{node}/edit')) ->setDefault('_entity_form', 'node.edit') ->setRequirement('_entity_access', 'node.update') + ->setRequirement('node', '\d+') ->setOption('_node_operation_route', TRUE); $route_collection->add('entity.node.edit_form', $route); diff --git a/core/modules/shortcut/shortcut.routing.yml b/core/modules/shortcut/shortcut.routing.yml index e9917fb..1133357 100644 --- a/core/modules/shortcut/shortcut.routing.yml +++ b/core/modules/shortcut/shortcut.routing.yml @@ -70,6 +70,7 @@ entity.shortcut.edit_form: _title: 'Edit' requirements: _entity_access: 'shortcut.update' + shortcut: \d+ entity.shortcut.link_delete_inline: path: '/admin/config/user-interface/shortcut/link/{shortcut}/delete-inline' @@ -78,6 +79,7 @@ entity.shortcut.link_delete_inline: requirements: _entity_access: 'shortcut.delete' _csrf_token: 'TRUE' + shortcut: \d+ entity.shortcut.delete_form: path: '/admin/config/user-interface/shortcut/link/{shortcut}/delete' @@ -86,6 +88,7 @@ entity.shortcut.delete_form: _title: 'Delete' requirements: _entity_access: 'shortcut.delete' + shortcut: \d+ shortcut.set_switch: path: '/user/{user}/shortcuts' @@ -96,3 +99,4 @@ shortcut.set_switch: _custom_access: 'Drupal\shortcut\Form\SwitchShortcutSet::checkAccess' options: _admin_route: TRUE + user: \d+ diff --git a/core/modules/taxonomy/taxonomy.routing.yml b/core/modules/taxonomy/taxonomy.routing.yml index 1d8218c..8a3bd1a 100644 --- a/core/modules/taxonomy/taxonomy.routing.yml +++ b/core/modules/taxonomy/taxonomy.routing.yml @@ -23,6 +23,7 @@ entity.taxonomy_term.edit_form: _admin_route: TRUE requirements: _entity_access: 'taxonomy_term.update' + taxonomy_term: \d+ entity.taxonomy_term.delete_form: path: '/taxonomy/term/{taxonomy_term}/delete' @@ -33,6 +34,7 @@ entity.taxonomy_term.delete_form: _admin_route: TRUE requirements: _entity_access: 'taxonomy_term.delete' + taxonomy_term: \d+ entity.taxonomy_vocabulary.add_form: path: '/admin/structure/taxonomy/add' diff --git a/core/modules/tracker/tracker.routing.yml b/core/modules/tracker/tracker.routing.yml index d227f6d..ed2f868 100644 --- a/core/modules/tracker/tracker.routing.yml +++ b/core/modules/tracker/tracker.routing.yml @@ -14,6 +14,7 @@ tracker.users_recent_content: requirements: _permission: 'access content' _access_tracker_own_information: 'TRUE' + user: \d+ tracker.user_tab: path: '/user/{user}/activity' @@ -23,4 +24,5 @@ tracker.user_tab: requirements: _permission: 'access content' _entity_access: 'user.view' + user: \d+ diff --git a/core/modules/user/src/Entity/UserRouteProvider.php b/core/modules/user/src/Entity/UserRouteProvider.php index a63a346..fb2ea69 100644 --- a/core/modules/user/src/Entity/UserRouteProvider.php +++ b/core/modules/user/src/Entity/UserRouteProvider.php @@ -37,6 +37,7 @@ public function getRoutes(EntityTypeInterface $entity_type) { '_title_callback' => 'Drupal\user\Controller\UserController::userTitle', ]) ->setOption('_admin_route', TRUE) + ->setRequirement('user', '\d+') ->setRequirement('_entity_access', 'user.update'); $route_collection->add('entity.user.edit_form', $route); @@ -46,6 +47,7 @@ public function getRoutes(EntityTypeInterface $entity_type) { '_entity_form' => 'user.cancel', ]) ->setOption('_admin_route', TRUE) + ->setRequirement('user', '\d+') ->setRequirement('_entity_access', 'user.delete'); $route_collection->add('entity.user.cancel_form', $route); diff --git a/core/modules/user/user.routing.yml b/core/modules/user/user.routing.yml index 6eb709f..6eea7ec 100644 --- a/core/modules/user/user.routing.yml +++ b/core/modules/user/user.routing.yml @@ -138,6 +138,7 @@ user.cancel_confirm: hashed_pass: '' requirements: _entity_access: 'user.delete' + user: \d+ user.reset: path: '/user/reset/{uid}/{timestamp}/{hash}'