diff -u b/core/lib/Drupal/Core/Render/Element/Radio.php b/core/lib/Drupal/Core/Render/Element/Radio.php --- b/core/lib/Drupal/Core/Render/Element/Radio.php +++ b/core/lib/Drupal/Core/Render/Element/Radio.php @@ -54,16 +54,23 @@ $element['#attributes']['type'] = 'radio'; Element::setAttributes($element, array('id', 'name', '#return_value' => 'value')); - if (isset($element['#return_value']) && $element['#value'] !== FALSE) { + if (isset($element['#return_value'])) { // To avoid auto-casting during '==' we convert int 0 to '0' for both // operands. It will prevent wrong true-checking for both cases: 0 == // 'string' and 'string' == 0. - if ($element['#value'] === 0) { + if ($element['#value'] === 0 || $element['#value'] === FALSE) { $element['#value'] = '0'; } - if ($element['#return_value'] === 0) { + elseif ($element['#value'] === TRUE) { + $element['#value'] = '1'; + } + if ($element['#return_value'] === 0 || $element['#return_value'] === FALSE) { $element['#return_value'] = '0'; } + elseif ($element['#return_value'] === TRUE) { + $element['#return_value'] = '1'; + } + if ($element['#value'] == $element['#return_value']) { $element['#attributes']['checked'] = 'checked'; } diff -u b/core/modules/system/src/Tests/Form/ElementTest.php b/core/modules/system/src/Tests/Form/ElementTest.php --- b/core/modules/system/src/Tests/Form/ElementTest.php +++ b/core/modules/system/src/Tests/Form/ElementTest.php @@ -100,6 +100,12 @@ $elements = $this->xpath('//input[@name="radios-string" and @checked]'); $this->assertEqual(count($elements), 1); $this->assertIdentical((string) $elements[0]['value'], 'bar'); + $elements = $this->xpath('//input[@name="radios-boolean-true" and @checked]'); + $this->assertEqual(count($elements), 1); + $this->assertIdentical((string) $elements[0]['value'], '1'); + $elements = $this->xpath('//input[@name="radios-boolean-false" and @checked]'); + $this->assertEqual(count($elements), 1); + $this->assertIdentical((string) $elements[0]['value'], '0'); } /** diff -u b/core/modules/system/tests/modules/form_test/src/Form/FormTestRadiosCheckedForm.php b/core/modules/system/tests/modules/form_test/src/Form/FormTestRadiosCheckedForm.php --- b/core/modules/system/tests/modules/form_test/src/Form/FormTestRadiosCheckedForm.php +++ b/core/modules/system/tests/modules/form_test/src/Form/FormTestRadiosCheckedForm.php @@ -51,6 +51,26 @@ ), '#default_value' => 'bar', ); + $form['radios-boolean-true'] = array( + '#type' => 'radios', + '#title' => 'Radios', + '#options' => array( + 'All' => '- Any -', + 1 => 'True', + 0 => 'False', + ), + '#default_value' => TRUE, + ); + $form['radios-boolean-false'] = array( + '#type' => 'radios', + '#title' => 'Radios', + '#options' => array( + 'All' => '- Any -', + 1 => 'True', + 0 => 'False', + ), + '#default_value' => FALSE, + ); $form['submit'] = array('#type' => 'submit', '#value' => 'Submit');