From 2f853b1863a9d52d146065b1dfdb1a13d8a9539d Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Wed, 3 Jun 2015 17:24:54 +0100 Subject: [PATCH] Issue #2218145 by mglaman, fran seva, Alumei, dawehner: Change EntityRouteEnhancer::enhance() to use protected methods instead of one giant method --- .../Entity/Enhancer/EntityRouteEnhancer.php | 153 ++++++++++++------ 1 file changed, 104 insertions(+), 49 deletions(-) diff --git a/core/lib/Drupal/Core/Entity/Enhancer/EntityRouteEnhancer.php b/core/lib/Drupal/Core/Entity/Enhancer/EntityRouteEnhancer.php index c330d3a05ee0..3300c714f03e 100644 --- a/core/lib/Drupal/Core/Entity/Enhancer/EntityRouteEnhancer.php +++ b/core/lib/Drupal/Core/Entity/Enhancer/EntityRouteEnhancer.php @@ -23,59 +23,13 @@ class EntityRouteEnhancer implements RouteEnhancerInterface { public function enhance(array $defaults, Request $request) { if (empty($defaults['_controller'])) { if (!empty($defaults['_entity_form'])) { - $defaults['_controller'] = 'controller.entity_form:getContentResult'; + $defaults = $this->enhanceEntityForm($defaults, $request); } elseif (!empty($defaults['_entity_list'])) { - $defaults['_controller'] = '\Drupal\Core\Entity\Controller\EntityListController::listing'; - $defaults['entity_type'] = $defaults['_entity_list']; - unset($defaults['_entity_list']); + $defaults = $this->enhanceEntityList($defaults, $request); } elseif (!empty($defaults['_entity_view'])) { - $defaults['_controller'] = '\Drupal\Core\Entity\Controller\EntityViewController::view'; - if (strpos($defaults['_entity_view'], '.') !== FALSE) { - // The _entity_view entry is of the form entity_type.view_mode. - list($entity_type, $view_mode) = explode('.', $defaults['_entity_view']); - $defaults['view_mode'] = $view_mode; - } - else { - // Only the entity type is nominated, the view mode will use the - // default. - $entity_type = $defaults['_entity_view']; - } - // Set by reference so that we get the upcast value. - if (!empty($defaults[$entity_type])) { - $defaults['_entity'] = &$defaults[$entity_type]; - } - else { - // The entity is not keyed by its entity_type. Attempt to find it - // using a converter. - $route = $defaults[RouteObjectInterface::ROUTE_OBJECT]; - if ($route && is_object($route)) { - $options = $route->getOptions(); - if (isset($options['parameters'])) { - foreach ($options['parameters'] as $name => $details) { - if (!empty($details['type'])) { - $type = $details['type']; - // Type is of the form entity:{entity_type}. - $parameter_entity_type = substr($type, strlen('entity:')); - if ($entity_type == $parameter_entity_type) { - // We have the matching entity type. Set the '_entity' key - // to point to this named placeholder. The entity in this - // position is the one being rendered. - $defaults['_entity'] = &$defaults[$name]; - } - } - } - } - else { - throw new \RuntimeException(sprintf('Failed to find entity of type %s in route named %s', $entity_type, $defaults[RouteObjectInterface::ROUTE_NAME])); - } - } - else { - throw new \RuntimeException(sprintf('Failed to find entity of type %s in route named %s', $entity_type, $defaults[RouteObjectInterface::ROUTE_NAME])); - } - } - unset($defaults['_entity_view']); + $defaults = $this->enhanceEntityView($defaults, $request); } } return $defaults; @@ -92,4 +46,105 @@ public function applies(Route $route) { ); } + /** + * Update defaults for entity forms. + * + * @param array $defaults + * The defaults to modify. + * @param \Symfony\Component\HttpFoundation\Request $request + * The Request instance. + * + * @return array + * The modified defaults. + */ + protected function enhanceEntityForm(array $defaults, Request $request) { + $defaults['_controller'] = 'controller.entity_form:getContentResult'; + + return $defaults; + } + + + /** + * Update defaults for an entity list. + * + * @param array $defaults + * The defaults to modify. + * @param \Symfony\Component\HttpFoundation\Request $request + * The Request instance. + * + * @return array + * The modified defaults. + */ + protected function enhanceEntityList(array $defaults, Request $request) { + $defaults['_controller'] = '\Drupal\Core\Entity\Controller\EntityListController::listing'; + $defaults['entity_type'] = $defaults['_entity_list']; + unset($defaults['_entity_list']); + + return $defaults; + } + + /** + * Update defaults for an entity view. + * + * @param array $defaults + * The defaults to modify. + * @param \Symfony\Component\HttpFoundation\Request $request + * The Request instance. + * + * @throws \RuntimeException + * Thrown when an entity of a type cannot be found in a route. + * + * @return array + * The modified defaults. + */ + protected function enhanceEntityView(array $defaults, Request $request) { + $defaults['_controller'] = '\Drupal\Core\Entity\Controller\EntityViewController::view'; + if (strpos($defaults['_entity_view'], '.') !== FALSE) { + // The _entity_view entry is of the form entity_type.view_mode. + list($entity_type, $view_mode) = explode('.', $defaults['_entity_view']); + $defaults['view_mode'] = $view_mode; + } + else { + // Only the entity type is nominated, the view mode will use the + // default. + $entity_type = $defaults['_entity_view']; + } + // Set by reference so that we get the upcast value. + if (!empty($defaults[$entity_type])) { + $defaults['_entity'] = &$defaults[$entity_type]; + } + else { + // The entity is not keyed by its entity_type. Attempt to find it + // using a converter. + $route = $defaults[RouteObjectInterface::ROUTE_OBJECT]; + if ($route && is_object($route)) { + $options = $route->getOptions(); + if (isset($options['parameters'])) { + foreach ($options['parameters'] as $name => $details) { + if (!empty($details['type'])) { + $type = $details['type']; + // Type is of the form entity:{entity_type}. + $parameter_entity_type = substr($type, strlen('entity:')); + if ($entity_type == $parameter_entity_type) { + // We have the matching entity type. Set the '_entity' key + // to point to this named placeholder. The entity in this + // position is the one being rendered. + $defaults['_entity'] = &$defaults[$name]; + } + } + } + } + else { + throw new \RuntimeException(sprintf('Failed to find entity of type %s in route named %s', $entity_type, $defaults[RouteObjectInterface::ROUTE_NAME])); + } + } + else { + throw new \RuntimeException(sprintf('Failed to find entity of type %s in route named %s', $entity_type, $defaults[RouteObjectInterface::ROUTE_NAME])); + } + } + unset($defaults['_entity_view']); + + return $defaults; + } + } -- GitLab