diff --git a/core/lib/Drupal/Core/Template/TwigExtension.php b/core/lib/Drupal/Core/Template/TwigExtension.php index 60c0ce0ddf4ccdf4a8b63af97d1723cdd19a4284..9200d0254177bea46d2eac95c3541517640e6f24 100644 --- a/core/lib/Drupal/Core/Template/TwigExtension.php +++ b/core/lib/Drupal/Core/Template/TwigExtension.php @@ -606,15 +606,18 @@ public function safeJoin(Environment $env, $value, $glue = '') { /** * Creates an Attribute object. * - * @param array $attributes - * (optional) An associative array of key-value pairs to be converted to - * HTML attributes. + * @param Attribute|array $attributes + * (optional) An existing attribute object or an associative array of + * key-value pairs to be converted to HTML attributes. * * @return \Drupal\Core\Template\Attribute * An attributes object that has the given attributes. */ - public function createAttribute(array $attributes = []) { - return new Attribute($attributes); + public function createAttribute(Attribute|array $attributes = []) { + if (\is_array($attributes)) { + return new Attribute($attributes); + } + return $attributes; } /** diff --git a/core/tests/Drupal/Tests/Core/Template/TwigExtensionTest.php b/core/tests/Drupal/Tests/Core/Template/TwigExtensionTest.php index 21b1ffe7bba31679344e9e7a957646c8d27c0664..6acf1ceabb956c26066bc6b1570a2197ae017243 100644 --- a/core/tests/Drupal/Tests/Core/Template/TwigExtensionTest.php +++ b/core/tests/Drupal/Tests/Core/Template/TwigExtensionTest.php @@ -10,6 +10,7 @@ use Drupal\Core\Render\Markup; use Drupal\Core\Render\RenderableInterface; use Drupal\Core\StringTranslation\TranslatableMarkup; +use Drupal\Core\Template\Attribute; use Drupal\Core\Template\Loader\StringLoader; use Drupal\Core\Template\TwigEnvironment; use Drupal\Core\Template\TwigExtension; @@ -404,9 +405,10 @@ public function testCreateAttribute() { ['class' => ['kittens'], 'data-toggle' => 'modal', 'data-lang' => 'es'], ['id' => 'puppies', 'data-value' => 'foo', 'data-lang' => 'en'], [], + new Attribute(), ]; $result = $twig->render($name, ['iterations' => $iterations]); - $expected = '<div class="kittens" data-toggle="modal" data-lang="es"></div><div id="puppies" data-value="foo" data-lang="en"></div><div></div>'; + $expected = '<div class="kittens" data-toggle="modal" data-lang="es"></div><div id="puppies" data-value="foo" data-lang="en"></div><div></div><div></div>'; $this->assertEquals($expected, $result); // Test default creation of empty attribute object and using its method.