From af362ba8a6d57d010eb2216b2517b69ab7e2847d Mon Sep 17 00:00:00 2001 From: catch Date: Fri, 11 Jun 2021 11:40:57 +0100 Subject: [PATCH] Issue #3012172 by acbramley: EntityViewBuilder::addContextualLinks assumes an entity's canonical rel is routed/internal (cherry picked from commit caa484543052f4dd96de8296bfba0368c39ca473) --- core/lib/Drupal/Core/Entity/EntityViewBuilder.php | 2 +- .../Core/Entity/EntityViewBuilderTest.php | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php index 722a9ce99286..cc883b25cfd8 100644 --- a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php +++ b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php @@ -362,7 +362,7 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf $rel = 'revision'; $key .= '_revision'; } - if ($entity->hasLinkTemplate($rel)) { + if ($entity->hasLinkTemplate($rel) && $entity->toUrl($rel)->isRouted()) { $build['#contextual_links'][$key] = [ 'route_parameters' => $entity->toUrl($rel)->getRouteParameters(), ]; diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityViewBuilderTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityViewBuilderTest.php index 957bb680fee8..fe68e84a3505 100644 --- a/core/tests/Drupal/KernelTests/Core/Entity/EntityViewBuilderTest.php +++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityViewBuilderTest.php @@ -343,4 +343,18 @@ class EntityViewBuilderTest extends EntityKernelTestBase { $this->assertArrayNotHasKey('#theme', $build); } + /** + * Tests an entity type with an external canonical rel. + */ + public function testExternalEntity() { + $this->installEntitySchema('entity_test_external'); + /** @var \Drupal\Core\Render\RendererInterface $renderer */ + $renderer = $this->container->get('renderer'); + $entity_test = $this->createTestEntity('entity_test_external'); + $entity_test->save(); + $view = $this->container->get('entity_type.manager')->getViewBuilder('entity_test_external')->view($entity_test); + $renderer->renderRoot($view); + $this->assertArrayNotHasKey('#contextual_links', $view); + } + }