diff --git a/core/lib/Drupal/Core/Template/TwigExtension.php b/core/lib/Drupal/Core/Template/TwigExtension.php index bb29cd1..fc6e2d0 100644 --- a/core/lib/Drupal/Core/Template/TwigExtension.php +++ b/core/lib/Drupal/Core/Template/TwigExtension.php @@ -231,13 +231,20 @@ public function getUrlFromPath($path, $options = array()) { * The link text for the anchor tag as a translated string. * @param \Drupal\Core\Url|string $url * The URL object or string used for the link. + * @param array $attributes + * An array of link attributes * * @return string * An HTML string containing a link to the given url. */ - public function getLink($text, $url) { + public function getLink($text, $url, $attributes = array()) { if (!$url instanceof Url) { $url = Url::fromUri($url); + $existing_attributes = $url->getOption('attributes'); + if (!is_array($existing_attributes)) { + $existing_attributes = array(); + } + $url->setOption('attributes', array_merge($existing_attributes , $attributes)); } return $this->linkGenerator->generate($text, $url); } diff --git a/core/modules/system/src/Tests/Theme/EngineTwigTest.php b/core/modules/system/src/Tests/Theme/EngineTwigTest.php index ff84af7..53e83f6 100644 --- a/core/modules/system/src/Tests/Theme/EngineTwigTest.php +++ b/core/modules/system/src/Tests/Theme/EngineTwigTest.php @@ -70,10 +70,14 @@ public function testTwigUrlGenerator() { public function testTwigLinkGenerator() { $this->drupalGet('twig-theme-test/link-generator'); + /** @var \Drupal\Core\Utility\LinkGenerator $link_generator */ $link_generator = $this->container->get('link_generator'); $expected = [ 'link via the linkgenerator: ' . $link_generator->generate('register', new Url('user.register')), + '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'])), ]; $content = $this->getRawContent(); diff --git a/core/modules/system/tests/modules/twig_theme_test/src/TwigThemeTestController.php b/core/modules/system/tests/modules/twig_theme_test/src/TwigThemeTestController.php index 50d6c99..1ed0d62 100644 --- a/core/modules/system/tests/modules/twig_theme_test/src/TwigThemeTestController.php +++ b/core/modules/system/tests/modules/twig_theme_test/src/TwigThemeTestController.php @@ -46,6 +46,7 @@ public function linkGeneratorRender() { return array( '#theme' => 'twig_theme_test_link_generator', '#test_url' => new Url('user.register'), + '#test_url_attribute' => new Url('user.register', [], ['attributes' => ['foo' => 'bar']]), ); } 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 a365859..084271e 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 +1,5 @@
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' }) }}
+ diff --git a/core/modules/system/tests/modules/twig_theme_test/twig_theme_test.module b/core/modules/system/tests/modules/twig_theme_test/twig_theme_test.module index 021d039..9aaccfa 100644 --- a/core/modules/system/tests/modules/twig_theme_test/twig_theme_test.module +++ b/core/modules/system/tests/modules/twig_theme_test/twig_theme_test.module @@ -39,7 +39,7 @@ function twig_theme_test_theme($existing, $type, $theme, $path) { 'template' => 'twig_theme_test.url_generator', ); $items['twig_theme_test_link_generator'] = array( - 'variables' => array('test_url' => NULL), + 'variables' => array('test_url' => NULL, 'test_url_attribute' => NULL), 'template' => 'twig_theme_test.link_generator', ); $items['twig_theme_test_url_to_string'] = array(