From 741775edaa03d4f25234b396b4eb2d58cb6a3a22 Mon Sep 17 00:00:00 2001 From: EAMoiseenko Date: Thu, 13 Jun 2024 13:20:00 +0300 Subject: [PATCH] (#20198) Convert boolean values to integer values for the value attribute --- framework/CHANGELOG.md | 1 + framework/helpers/BaseHtml.php | 4 +++- tests/framework/helpers/HtmlTest.php | 10 ++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index fe3470618fb..aa238ecd229 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -7,6 +7,7 @@ Yii Framework 2 Change Log - Bug #16116: Codeception: oci does not support enabling/disabling integrity check (@terabytesoftw) - Bug #20191: Fix `ActiveRecord::getDirtyAttributes()` for JSON columns with multi-dimensional array values (brandonkelly) - Bug #20175: Fix bad result for pagination when used with GridView (@lav45) +- Enh #20198: Boolean values of the `value` HTML attribute are now converted to integer values (@s1lver) 2.0.50 May 30, 2024 diff --git a/framework/helpers/BaseHtml.php b/framework/helpers/BaseHtml.php index ff81df22752..e69c68929a9 100644 --- a/framework/helpers/BaseHtml.php +++ b/framework/helpers/BaseHtml.php @@ -2003,8 +2003,10 @@ public static function renderTagAttributes($attributes) $html = ''; foreach ($attributes as $name => $value) { if (is_bool($value)) { - if ($value) { + if ($value && 'value' !== $name) { $html .= " $name"; + } elseif ('value' === $name) { + $html .= " $name=\"" . static::encode((int)$value) . '"'; } } elseif (is_array($value)) { if (in_array($name, static::$dataAttributes)) { diff --git a/tests/framework/helpers/HtmlTest.php b/tests/framework/helpers/HtmlTest.php index 24c8186181b..2d499031361 100644 --- a/tests/framework/helpers/HtmlTest.php +++ b/tests/framework/helpers/HtmlTest.php @@ -1231,6 +1231,16 @@ public function testRenderTagAttributes() $this->assertEquals('', Html::renderTagAttributes(['class' => []])); $this->assertEquals(' style="width: 100px; height: 200px;"', Html::renderTagAttributes(['style' => ['width' => '100px', 'height' => '200px']])); $this->assertEquals('', Html::renderTagAttributes(['style' => []])); + $this->assertEquals(' type="submit" value="1"', Html::renderTagAttributes(['type' => 'submit', 'value' => true])); + $this->assertEquals(' type="submit" value="0"', Html::renderTagAttributes(['type' => 'submit', 'value' => false])); + $this->assertEquals( + ' type="submit" value="1" disabled', + Html::renderTagAttributes(['type' => 'submit', 'value' => true, 'disabled' => true]) + ); + $this->assertEquals( + ' type="submit" value="0"', + Html::renderTagAttributes(['type' => 'submit', 'value' => false, 'disabled' => false]) + ); $attributes = [ 'data' => [