Don't set "required" attribute for checkboxes (unless explicitly specified).

Adding it prevents user from submitting form with checkbox unchecked when the "boolean" validation rule is specified for the field.
Closes #3560
This commit is contained in:
ADmad 2013-01-23 20:38:24 +05:30
parent 51946ff8fd
commit 82f34c4cb3
2 changed files with 25 additions and 1 deletions

View file

@ -128,6 +128,7 @@ class Contact extends CakeTestModel {
'rule_on_create' => array('rule' => array('maxLength', 50), 'on' => 'create'), 'rule_on_create' => array('rule' => array('maxLength', 50), 'on' => 'create'),
'rule_on_update' => array('rule' => array('between', 1, 50), 'on' => 'update'), 'rule_on_update' => array('rule' => array('between', 1, 50), 'on' => 'update'),
), ),
'boolean_field' => array('rule' => 'boolean')
); );
/** /**
@ -7279,6 +7280,28 @@ class FormHelperTest extends CakeTestCase {
'/div' '/div'
); );
$this->assertTags($result, $expected); $this->assertTags($result, $expected);
$result = $this->Form->input('Contact.boolean_field', array('type' => 'checkbox'));
$expected = array(
'div' => array('class' => 'input checkbox required'),
array('input' => array(
'type' => 'hidden',
'name' => 'data[Contact][boolean_field]',
'id' => 'ContactBooleanField_',
'value' => '0'
)),
array('input' => array(
'type' => 'checkbox',
'name' => 'data[Contact][boolean_field]',
'value' => '1',
'id' => 'ContactBooleanField'
)),
'label' => array('for' => 'ContactBooleanField'),
'Boolean Field',
'/label',
'/div'
);
$this->assertTags($result, $expected);
} }
/** /**

View file

@ -1379,9 +1379,10 @@ class FormHelper extends AppHelper {
unset($options['default']); unset($options['default']);
} }
$options += array('required' => false);
$options = $this->_initInputField($fieldName, $options) + array('hiddenField' => true); $options = $this->_initInputField($fieldName, $options) + array('hiddenField' => true);
$value = current($this->value($valueOptions)); $value = current($this->value($valueOptions));
$output = ""; $output = '';
if (empty($options['value'])) { if (empty($options['value'])) {
$options['value'] = 1; $options['value'] = 1;