Skip to content
Permalink
Browse files

Fix radio() and boolean values.

Boolean values should be cast to integer equivalents, which allows
for correct handling of boolean columns and their string equivalents
used in form options.

Fixes #3512
  • Loading branch information...
markstory committed Jan 8, 2013
1 parent e132a7c commit 3f21d09c1d91ddfbddce6608ecf89811a412d4eb
Showing with 33 additions and 1 deletion.
  1. +29 −1 lib/Cake/Test/Case/View/Helper/FormHelperTest.php
  2. +4 −0 lib/Cake/View/Helper/FormHelper.php
@@ -3407,10 +3407,11 @@ public function testRadio() {
/**
* Test that radios with a 0 value are selected under the correct conditions.
* Also ensure that values that are booleanish are handled correctly.
*
* @return void
*/
public function testRadioOptionWithZeroValue() {
public function testRadioOptionWithBooleanishValues() {
$expected = array(
'fieldset' => array(),
'legend' => array(),
@@ -3432,6 +3433,9 @@ public function testRadioOptionWithZeroValue() {
$result = $this->Form->radio('Model.field', array('1' => 'Yes', '0' => 'No'), array('value' => 0));
$this->assertTags($result, $expected);
$result = $this->Form->radio('Model.field', array('1' => 'Yes', '0' => 'No'), array('value' => false));
$this->assertTags($result, $expected);
$expected = array(
'fieldset' => array(),
'legend' => array(),
@@ -3456,6 +3460,30 @@ public function testRadioOptionWithZeroValue() {
$result = $this->Form->radio('Model.field', array('1' => 'Yes', '0' => 'No'));
$this->assertTags($result, $expected);
$expected = array(
'fieldset' => array(),
'legend' => array(),
'Field',
'/legend',
array('input' => array('type' => 'radio', 'name' => 'data[Model][field]', 'checked' => 'checked', 'value' => '1', 'id' => 'ModelField1')),
array('label' => array('for' => 'ModelField1')),
'Yes',
'/label',
array('input' => array('type' => 'radio', 'name' => 'data[Model][field]', 'value' => '0', 'id' => 'ModelField0')),
array('label' => array('for' => 'ModelField0')),
'No',
'/label',
'/fieldset'
);
$result = $this->Form->radio('Model.field', array('1' => 'Yes', '0' => 'No'), array('value' => 1));
$this->assertTags($result, $expected);
$result = $this->Form->radio('Model.field', array('1' => 'Yes', '0' => 'No'), array('value' => '1'));
$this->assertTags($result, $expected);
$result = $this->Form->radio('Model.field', array('1' => 'Yes', '0' => 'No'), array('value' => true));
$this->assertTags($result, $expected);
}
/**
@@ -1385,6 +1385,10 @@ public function radio($fieldName, $options = array(), $attributes = array()) {
$hiddenField = isset($attributes['hiddenField']) ? $attributes['hiddenField'] : true;
unset($attributes['hiddenField']);
if (isset($value) && is_bool($value)) {
$value = $value ? 1 : 0;
}
foreach ($options as $optValue => $optTitle) {
$optionsHere = array('value' => $optValue);

0 comments on commit 3f21d09

Please sign in to comment.
You can’t perform that action at this time.