Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixing issue where FormHelper::checkbox() would ignore an explicit ch…

…ecked = false, and use the post data instead. Test case added. Fixes #1437
  • Loading branch information...
commit b8780586ec9f04ff245c5772d4f36919ec6148bf 1 parent 7548379
Mark Story markstory authored
5 cake/libs/view/helpers/form.php
View
@@ -1007,7 +1007,10 @@ function checkbox($fieldName, $options = array()) {
if (empty($options['value'])) {
$options['value'] = 1;
- } elseif (!empty($value) && $value === $options['value']) {
+ } elseif (
+ (!isset($options['checked']) && !empty($value) && $value === $options['value']) ||
+ !empty($options['checked'])
+ ) {
$options['checked'] = 'checked';
}
if ($options['hiddenField']) {
64 cake/tests/cases/libs/view/helpers/form.test.php
View
@@ -3773,27 +3773,6 @@ function testCheckbox() {
);
$this->assertTags($result, $expected);
- $result = $this->Form->checkbox('Model.field', array('checked' => 'checked'));
- $expected = array(
- 'input' => array('type' => 'hidden', 'name' => 'data[Model][field]', 'value' => '0', 'id' => 'ModelField_'),
- array('input' => array('type' => 'checkbox', 'name' => 'data[Model][field]', 'value' => '1', 'id' => 'ModelField', 'checked' => 'checked'))
- );
- $this->assertTags($result, $expected);
-
- $result = $this->Form->checkbox('Model.field', array('checked' => 1));
- $expected = array(
- 'input' => array('type' => 'hidden', 'name' => 'data[Model][field]', 'value' => '0', 'id' => 'ModelField_'),
- array('input' => array('type' => 'checkbox', 'name' => 'data[Model][field]', 'value' => '1', 'id' => 'ModelField', 'checked' => 'checked'))
- );
- $this->assertTags($result, $expected);
-
- $result = $this->Form->checkbox('Model.field', array('checked' => true));
- $expected = array(
- 'input' => array('type' => 'hidden', 'name' => 'data[Model][field]', 'value' => '0', 'id' => 'ModelField_'),
- array('input' => array('type' => 'checkbox', 'name' => 'data[Model][field]', 'value' => '1', 'id' => 'ModelField', 'checked' => 'checked'))
- );
- $this->assertTags($result, $expected);
-
$this->Form->validationErrors['Model']['field'] = 1;
$this->Form->data['Contact']['published'] = 1;
$result = $this->Form->checkbox('Contact.published', array('id' => 'theID'));
@@ -3835,6 +3814,49 @@ function testCheckbox() {
}
/**
+ * test the checked option for checkboxes.
+ *
+ * @return void
+ */
+ function testCheckboxCheckedOption() {
+ $result = $this->Form->checkbox('Model.field', array('checked' => 'checked'));
+ $expected = array(
+ 'input' => array('type' => 'hidden', 'name' => 'data[Model][field]', 'value' => '0', 'id' => 'ModelField_'),
+ array('input' => array('type' => 'checkbox', 'name' => 'data[Model][field]', 'value' => '1', 'id' => 'ModelField', 'checked' => 'checked'))
+ );
+ $this->assertTags($result, $expected);
+
+ $result = $this->Form->checkbox('Model.field', array('checked' => 1));
+ $expected = array(
+ 'input' => array('type' => 'hidden', 'name' => 'data[Model][field]', 'value' => '0', 'id' => 'ModelField_'),
+ array('input' => array('type' => 'checkbox', 'name' => 'data[Model][field]', 'value' => '1', 'id' => 'ModelField', 'checked' => 'checked'))
+ );
+ $this->assertTags($result, $expected);
+
+ $result = $this->Form->checkbox('Model.field', array('checked' => true));
+ $expected = array(
+ 'input' => array('type' => 'hidden', 'name' => 'data[Model][field]', 'value' => '0', 'id' => 'ModelField_'),
+ array('input' => array('type' => 'checkbox', 'name' => 'data[Model][field]', 'value' => '1', 'id' => 'ModelField', 'checked' => 'checked'))
+ );
+ $this->assertTags($result, $expected);
+
+ $result = $this->Form->checkbox('Model.field', array('checked' => false));
+ $expected = array(
+ 'input' => array('type' => 'hidden', 'name' => 'data[Model][field]', 'value' => '0', 'id' => 'ModelField_'),
+ array('input' => array('type' => 'checkbox', 'name' => 'data[Model][field]', 'value' => '1', 'id' => 'ModelField'))
+ );
+ $this->assertTags($result, $expected);
+
+ $this->Form->data['Model']['field'] = 1;
+ $result = $this->Form->checkbox('Model.field', array('checked' => false));
+ $expected = array(
+ 'input' => array('type' => 'hidden', 'name' => 'data[Model][field]', 'value' => '0', 'id' => 'ModelField_'),
+ array('input' => array('type' => 'checkbox', 'name' => 'data[Model][field]', 'value' => '1', 'id' => 'ModelField'))
+ );
+ $this->assertTags($result, $expected);
+ }
+
+/**
* Test that disabling a checkbox also disables the hidden input so no value is submitted
*
* @return void
Please sign in to comment.
Something went wrong with that request. Please try again.