diff --git a/core/lib/Drupal/Core/Template/TwigExtension.php b/core/lib/Drupal/Core/Template/TwigExtension.php index a499db5..95bf482 100644 --- a/core/lib/Drupal/Core/Template/TwigExtension.php +++ b/core/lib/Drupal/Core/Template/TwigExtension.php @@ -231,11 +231,12 @@ public function getUrlFromPath($path, $options = array()) { public function getLink($text, $url, array $attributes = []) { if (!$url instanceof Url) { $url = Url::fromUri($url); - $existing_attributes = $url->getOption('attributes'); - if (!is_array($existing_attributes)) { - $existing_attributes = []; - } - $url->setOption('attributes', array_merge($existing_attributes, $attributes)); + } + if ($existing_attributes = $url->getOption('attributes')) { + $attributes = array_merge($existing_attributes, $attributes); + } + if ($attributes) { + $url->setOption('attributes', $attributes); } $build = [ '#type' => 'link', diff --git a/core/modules/system/src/Tests/Theme/EngineTwigTest.php b/core/modules/system/src/Tests/Theme/EngineTwigTest.php index d17aaf3..1e78bc3 100644 --- a/core/modules/system/src/Tests/Theme/EngineTwigTest.php +++ b/core/modules/system/src/Tests/Theme/EngineTwigTest.php @@ -82,9 +82,9 @@ public function testTwigLinkGenerator() { $expected = [ 'link via the linkgenerator: ' . $link_generator->generate('register', new Url('user.register', [], ['absolute' => TRUE])), - 'link via the linkgenerator: ' . $link_generator->generate('register', new Url('user.register', [], ['attributes' => ['foo' => 'bar']])), - 'link via the linkgenerator: ' . $link_generator->generate('register', new Url('user.register', []), ['id' => 'kitten', 'foo' => 'bar']), - 'link via the linkgenerator: ' . $link_generator->generate('register', new Url('user.register', [], ['id' => 'kitten'])), + 'link via the linkgenerator: ' . $link_generator->generate('register', new Url('user.register', [], ['absolute' => TRUE, 'attributes' => ['foo' => 'bar']])), + 'link via the linkgenerator: ' . $link_generator->generate('register', new Url('user.register', [], ['attributes' => ['foo' => 'bar', 'id' => 'kitten']])), + 'link via the linkgenerator: ' . $link_generator->generate('register', new Url('user.register', [], ['absolute' => TRUE, 'attributes' => ['id' => 'kitten']])), ]; // Verify that link() has the ability to bubble cacheability metadata: diff --git a/core/modules/system/tests/modules/twig_theme_test/templates/twig_theme_test.link_generator.html.twig b/core/modules/system/tests/modules/twig_theme_test/templates/twig_theme_test.link_generator.html.twig index 9300dfc..2e8517d 100644 --- a/core/modules/system/tests/modules/twig_theme_test/templates/twig_theme_test.link_generator.html.twig +++ b/core/modules/system/tests/modules/twig_theme_test/templates/twig_theme_test.link_generator.html.twig @@ -1,4 +1,4 @@
link via the linkgenerator: {{ link("register", test_url) }}
-
link via the linkgenerator: {{ link("register", test_url, { 'foo': 'bar' }) }}
-
link via the linkgenerator: {{ link("register", test_url_attribute, { 'id': 'kitten' }) }}
-
link via the linkgenerator: {{ link("register", url('user.register'), { 'id': 'kitten' }) }}
+
link via the linkgenerator: {{ link("register", test_url, {'foo': 'bar'}) }}
+
link via the linkgenerator: {{ link("register", test_url_attribute, {'id': 'kitten'} ) }}
+
link via the linkgenerator: {{ link("register", url('user.register')|render, {'id': 'kitten'}) }}