From 2f7924b3abdfe99f11515349c5a2899b27549b4f Mon Sep 17 00:00:00 2001 From: Nathaniel Catchpole <catch@35733.no-reply.drupal.org> Date: Wed, 19 Oct 2016 11:37:56 +0100 Subject: [PATCH] Issue #2752463 by tstoeckler: EntityResolverManager::setParametersFromEntityInformation() sets parameter info for non-existing parameters --- .../Core/Entity/EntityResolverManager.php | 5 ++++- .../Core/Entity/EntityResolverManagerTest.php | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/core/lib/Drupal/Core/Entity/EntityResolverManager.php b/core/lib/Drupal/Core/Entity/EntityResolverManager.php index 79e62d1c3ae9..847a480e4c9e 100644 --- a/core/lib/Drupal/Core/Entity/EntityResolverManager.php +++ b/core/lib/Drupal/Core/Entity/EntityResolverManager.php @@ -166,7 +166,10 @@ protected function setParametersFromEntityInformation(Route $route) { list($entity_type) = explode('.', $entity_form, 2); } - if (isset($entity_type) && isset($this->getEntityTypes()[$entity_type])) { + // Do not add parameter information if the route does not declare a + // parameter in the first place. This is the case for add forms, for + // example. + if (isset($entity_type) && isset($this->getEntityTypes()[$entity_type]) && (strpos($route->getPath(), '{' . $entity_type . '}') !== FALSE)) { $parameter_definitions = $route->getOption('parameters') ?: array(); // First try to figure out whether there is already a parameter upcasting diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityResolverManagerTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityResolverManagerTest.php index bacab58af128..6e164708b94d 100644 --- a/core/tests/Drupal/Tests/Core/Entity/EntityResolverManagerTest.php +++ b/core/tests/Drupal/Tests/Core/Entity/EntityResolverManagerTest.php @@ -416,6 +416,27 @@ public function testSetRouteOptionsWithEntityFormRouteAndArgument() { $this->assertEquals($expect, $parameters); } + /** + * Tests setRouteOptions() with an _entity_form route for an add form. + * + * @covers ::setRouteOptions + * @covers ::getControllerClass + * @covers ::getEntityTypes + * @covers ::setParametersFromReflection + * @covers ::setParametersFromEntityInformation + */ + public function testSetRouteOptionsWithEntityAddFormRoute() { + $this->setupEntityTypes(); + $route = new Route('/example/add', array( + '_entity_form' => 'entity_test.add', + )); + + $defaults = $route->getDefaults(); + $this->entityResolverManager->setRouteOptions($route); + $this->assertEquals($defaults, $route->getDefaults()); + $this->assertFalse($route->hasOption('parameters')); + } + /** * Creates the entity manager mock returning entity type objects. */ -- GitLab