annotate core/modules/layout_builder/src/Routing/LayoutBuilderRoutesTrait.php @ 14:1fec387a4317

Update Drupal core to 8.5.2 via Composer
author Chris Cannam
date Mon, 23 Apr 2018 09:46:53 +0100
parents
children 129ea1e6d783
rev   line source
Chris@14 1 <?php
Chris@14 2
Chris@14 3 namespace Drupal\layout_builder\Routing;
Chris@14 4
Chris@14 5 use Drupal\Component\Utility\NestedArray;
Chris@14 6 use Drupal\layout_builder\OverridesSectionStorageInterface;
Chris@14 7 use Drupal\layout_builder\SectionStorage\SectionStorageDefinition;
Chris@14 8 use Symfony\Component\Routing\Route;
Chris@14 9 use Symfony\Component\Routing\RouteCollection;
Chris@14 10
Chris@14 11 /**
Chris@14 12 * Provides a trait for building routes for a Layout Builder UI.
Chris@14 13 *
Chris@14 14 * @internal
Chris@14 15 * Layout Builder is currently experimental and should only be leveraged by
Chris@14 16 * experimental modules and development releases of contributed modules.
Chris@14 17 * See https://www.drupal.org/core/experimental for more information.
Chris@14 18 */
Chris@14 19 trait LayoutBuilderRoutesTrait {
Chris@14 20
Chris@14 21 /**
Chris@14 22 * Builds the layout routes for the given values.
Chris@14 23 *
Chris@14 24 * @param \Symfony\Component\Routing\RouteCollection $collection
Chris@14 25 * The route collection.
Chris@14 26 * @param \Drupal\layout_builder\SectionStorage\SectionStorageDefinition $definition
Chris@14 27 * The definition of the section storage.
Chris@14 28 * @param string $path
Chris@14 29 * The path patten for the routes.
Chris@14 30 * @param array $defaults
Chris@14 31 * (optional) An array of default parameter values.
Chris@14 32 * @param array $requirements
Chris@14 33 * (optional) An array of requirements for parameters.
Chris@14 34 * @param array $options
Chris@14 35 * (optional) An array of options.
Chris@14 36 * @param string $route_name_prefix
Chris@14 37 * (optional) The prefix to use for the route name.
Chris@14 38 */
Chris@14 39 protected function buildLayoutRoutes(RouteCollection $collection, SectionStorageDefinition $definition, $path, array $defaults = [], array $requirements = [], array $options = [], $route_name_prefix = '') {
Chris@14 40 $type = $definition->id();
Chris@14 41 $defaults['section_storage_type'] = $type;
Chris@14 42 // Provide an empty value to allow the section storage to be upcast.
Chris@14 43 $defaults['section_storage'] = '';
Chris@14 44 // Trigger the layout builder access check.
Chris@14 45 $requirements['_has_layout_section'] = 'true';
Chris@14 46 // Trigger the layout builder RouteEnhancer.
Chris@14 47 $options['_layout_builder'] = TRUE;
Chris@14 48 // Trigger the layout builder param converter.
Chris@14 49 $parameters['section_storage']['layout_builder_tempstore'] = TRUE;
Chris@14 50 // Merge the passed in options in after Layout Builder's parameters.
Chris@14 51 $options = NestedArray::mergeDeep(['parameters' => $parameters], $options);
Chris@14 52
Chris@14 53 if ($route_name_prefix) {
Chris@14 54 $route_name_prefix = "layout_builder.$type.$route_name_prefix";
Chris@14 55 }
Chris@14 56 else {
Chris@14 57 $route_name_prefix = "layout_builder.$type";
Chris@14 58 }
Chris@14 59
Chris@14 60 $main_defaults = $defaults;
Chris@14 61 $main_defaults['is_rebuilding'] = FALSE;
Chris@14 62 $main_defaults['_controller'] = '\Drupal\layout_builder\Controller\LayoutBuilderController::layout';
Chris@14 63 $main_defaults['_title_callback'] = '\Drupal\layout_builder\Controller\LayoutBuilderController::title';
Chris@14 64 $route = (new Route($path))
Chris@14 65 ->setDefaults($main_defaults)
Chris@14 66 ->setRequirements($requirements)
Chris@14 67 ->setOptions($options);
Chris@14 68 $collection->add("$route_name_prefix.view", $route);
Chris@14 69
Chris@14 70 $save_defaults = $defaults;
Chris@14 71 $save_defaults['_controller'] = '\Drupal\layout_builder\Controller\LayoutBuilderController::saveLayout';
Chris@14 72 $route = (new Route("$path/save"))
Chris@14 73 ->setDefaults($save_defaults)
Chris@14 74 ->setRequirements($requirements)
Chris@14 75 ->setOptions($options);
Chris@14 76 $collection->add("$route_name_prefix.save", $route);
Chris@14 77
Chris@14 78 $cancel_defaults = $defaults;
Chris@14 79 $cancel_defaults['_controller'] = '\Drupal\layout_builder\Controller\LayoutBuilderController::cancelLayout';
Chris@14 80 $route = (new Route("$path/cancel"))
Chris@14 81 ->setDefaults($cancel_defaults)
Chris@14 82 ->setRequirements($requirements)
Chris@14 83 ->setOptions($options);
Chris@14 84 $collection->add("$route_name_prefix.cancel", $route);
Chris@14 85
Chris@14 86 if (is_subclass_of($definition->getClass(), OverridesSectionStorageInterface::class)) {
Chris@14 87 $revert_defaults = $defaults;
Chris@14 88 $revert_defaults['_form'] = '\Drupal\layout_builder\Form\RevertOverridesForm';
Chris@14 89 $route = (new Route("$path/revert"))
Chris@14 90 ->setDefaults($revert_defaults)
Chris@14 91 ->setRequirements($requirements)
Chris@14 92 ->setOptions($options);
Chris@14 93 $collection->add("$route_name_prefix.revert", $route);
Chris@14 94 }
Chris@14 95 }
Chris@14 96
Chris@14 97 }