.../settings_tray/settings_tray.routing.yml | 7 +++ .../settings_tray/settings_tray.services.yml | 9 +++ .../BlockEntityOffCanvasFormRouteProcessorBC.php | 65 ++++++++++++++++++++++ .../tests/src/Functional/BcRoutesTest.php | 33 +++++++++++ 4 files changed, 114 insertions(+) diff --git a/core/modules/settings_tray/settings_tray.routing.yml b/core/modules/settings_tray/settings_tray.routing.yml index d1040b3..fd340e5 100644 --- a/core/modules/settings_tray/settings_tray.routing.yml +++ b/core/modules/settings_tray/settings_tray.routing.yml @@ -6,3 +6,10 @@ entity.block.settings_tray_form: requirements: _permission: 'administer blocks' _access_block_plugin_has_settings_tray_form: 'TRUE' + +# Deprecated. +# @see entity.block.settings_tray_form +# @see \Drupal\settings_tray\RouteProcessor\BlockEntityOffCanvasFormRouteProcessorBC +# @todo Remove in Drupal 9.0.0. +entity.block.off_canvas_form: + path: '' diff --git a/core/modules/settings_tray/settings_tray.services.yml b/core/modules/settings_tray/settings_tray.services.yml index a11a1d4..0457101 100644 --- a/core/modules/settings_tray/settings_tray.services.yml +++ b/core/modules/settings_tray/settings_tray.services.yml @@ -3,3 +3,12 @@ services: class: Drupal\settings_tray\Access\BlockPluginHasSettingsTrayFormAccessCheck tags: - { name: access_check, applies_to: _access_block_plugin_has_settings_tray_form } + + # BC layers. + # @todo Remove in Drupal 9.0.0. + settings_tray.route_processor_off_canvas_form_bc: + class: \Drupal\settings_tray\RouteProcessor\BlockEntityOffCanvasFormRouteProcessorBC + arguments: ['@router.route_provider'] + public: false + tags: + - { name: route_processor_outbound } diff --git a/core/modules/settings_tray/src/RouteProcessor/BlockEntityOffCanvasFormRouteProcessorBC.php b/core/modules/settings_tray/src/RouteProcessor/BlockEntityOffCanvasFormRouteProcessorBC.php new file mode 100644 index 0000000..48935ae --- /dev/null +++ b/core/modules/settings_tray/src/RouteProcessor/BlockEntityOffCanvasFormRouteProcessorBC.php @@ -0,0 +1,65 @@ +routeProvider = $route_provider; + } + + /** + * {@inheritdoc} + */ + public function processOutbound($route_name, Route $route, array &$parameters, BubbleableMetadata $bubbleable_metadata = NULL) { + if ($route_name === 'entity.block.off_canvas_form') { + $redirected_route_name = 'entity.block.settings_tray_form'; + @trigger_error(sprintf("The '%s' route is deprecated since version 8.5.x and will be removed in 9.0.0. Use the '%s' route instead.", $route_name, $redirected_route_name), E_USER_DEPRECATED); + static::overwriteRoute($route, $this->routeProvider->getRouteByName($redirected_route_name)); + } + } + + /** + * Overwrites one route's metadata with the other's. + * + * @param \Symfony\Component\Routing\Route $target_route + * The route whose metadata to overwrite. + * @param \Symfony\Component\Routing\Route $source_route + * The route whose metadata to read from. + * + * @see \Symfony\Component\Routing\Route + */ + protected static function overwriteRoute(Route $target_route, Route $source_route) { + $target_route->setPath($source_route->getPath()); + $target_route->setDefaults($source_route->getDefaults()); + $target_route->setRequirements($source_route->getRequirements()); + $target_route->setOptions($source_route->getOptions()); + $target_route->setHost($source_route->getHost()); + $target_route->setSchemes($source_route->getSchemes()); + $target_route->setMethods($source_route->getMethods()); + } + +} diff --git a/core/modules/settings_tray/tests/src/Functional/BcRoutesTest.php b/core/modules/settings_tray/tests/src/Functional/BcRoutesTest.php new file mode 100644 index 0000000..6750b1c --- /dev/null +++ b/core/modules/settings_tray/tests/src/Functional/BcRoutesTest.php @@ -0,0 +1,33 @@ +placeBlock('system_powered_by_block'); + $url_for_current_route = Url::fromRoute('entity.block.settings_tray_form', ['block' => $block->id()])->toString(TRUE)->getGeneratedUrl(); + $url_for_bc_route = Url::fromRoute('entity.block.off_canvas_form', ['block' => $block->id()])->toString(TRUE)->getGeneratedUrl(); + $this->assertSame($url_for_current_route, $url_for_bc_route); + } + +}