diff --git a/lib/Cake/Test/Case/View/Helper/FormHelperTest.php b/lib/Cake/Test/Case/View/Helper/FormHelperTest.php index d4ce34deb..59d5e8c46 100644 --- a/lib/Cake/Test/Case/View/Helper/FormHelperTest.php +++ b/lib/Cake/Test/Case/View/Helper/FormHelperTest.php @@ -2623,6 +2623,36 @@ class FormHelperTest extends CakeTestCase { $this->assertTags($result, $expected); } +/** + * Test that magic input() selects are created for type=number + * + * @return void + */ + public function testInputMagicSelectForTypeNumber() { + $this->View->viewVars['balances'] = array(0 => 'nothing', 1 => 'some', 100 => 'a lot'); + $this->Form->request->data = array('ValidateUser' => array('balance' => 1)); + $result = $this->Form->input('ValidateUser.balance'); + $expected = array( + 'div' => array('class' => 'input select'), + 'label' => array('for' => 'ValidateUserBalance'), + 'Balance', + '/label', + 'select' => array('name' => 'data[ValidateUser][balance]', 'id' => 'ValidateUserBalance'), + array('option' => array('value' => '0')), + 'nothing', + '/option', + array('option' => array('value' => '1', 'selected' => 'selected')), + 'some', + '/option', + array('option' => array('value' => '100')), + 'a lot', + '/option', + '/select', + '/div' + ); + $this->assertTags($result, $expected); + } + /** * Test that magic input() selects can easily be converted into radio types without error. * diff --git a/lib/Cake/View/Helper/FormHelper.php b/lib/Cake/View/Helper/FormHelper.php index ea843e4ae..4cf59532d 100644 --- a/lib/Cake/View/Helper/FormHelper.php +++ b/lib/Cake/View/Helper/FormHelper.php @@ -994,7 +994,7 @@ class FormHelper extends AppHelper { if ( (!isset($options['options']) && in_array($options['type'], $types)) || - (isset($magicType) && $options['type'] == 'text') + (isset($magicType) && in_array($options['type'], array('text', 'number'))) ) { $varName = Inflector::variable( Inflector::pluralize(preg_replace('/_id$/', '', $fieldKey)) @@ -1006,12 +1006,17 @@ class FormHelper extends AppHelper { } $options['options'] = $varOptions; } + + if ($options['type'] === 'select' && array_key_exists('step', $options)) { + unset($options['step']); + } } $autoLength = ( !array_key_exists('maxlength', $options) && isset($fieldDef['length']) && - is_scalar($fieldDef['length']) + is_scalar($fieldDef['length']) && + $options['type'] !== 'select' ); if ($autoLength && $options['type'] == 'text') { $options['maxlength'] = $fieldDef['length'];