diff --git a/lib/Cake/Test/Case/View/Helper/FormHelperTest.php b/lib/Cake/Test/Case/View/Helper/FormHelperTest.php index cb2349909..6792bb9fa 100644 --- a/lib/Cake/Test/Case/View/Helper/FormHelperTest.php +++ b/lib/Cake/Test/Case/View/Helper/FormHelperTest.php @@ -4191,6 +4191,32 @@ class FormHelperTest extends CakeTestCase { '/select' ); $this->assertTags($result, $expected); + + $result = $this->Form->select('Contact.required_one', array('option A')); + $expected = array( + 'select' => array( + 'name' => 'data[Contact][required_one]', + 'id' => 'ContactRequiredOne', + 'required' => 'required' + ), + array('option' => array('value' => '')), '/option', + array('option' => array('value' => '0')), 'option A', '/option', + '/select' + ); + $this->assertTags($result, $expected); + + $result = $this->Form->select('Contact.required_one', array('option A'), array('disabled' => true)); + $expected = array( + 'select' => array( + 'name' => 'data[Contact][required_one]', + 'id' => 'ContactRequiredOne', + 'disabled' => 'disabled' + ), + array('option' => array('value' => '', 'disabled' => 'disabled')), '/option', + array('option' => array('value' => '0', 'disabled' => 'disabled')), 'option A', '/option', + '/select' + ); + $this->assertTags($result, $expected); } /** @@ -4444,6 +4470,26 @@ class FormHelperTest extends CakeTestCase { '/select' ); $this->assertTags($result, $expected); + + $result = $this->Form->select('Contact.required_one', array( + '1' => 'option A', + '2' => 'option B' + ), array('multiple' => true)); + $expected = array( + 'input' => array( + 'type' => 'hidden', 'name' => 'data[Contact][required_one]', 'value' => '', 'id' => 'ContactRequiredOne_' + ), + 'select' => array( + 'name' => 'data[Contact][required_one][]', + 'id' => 'ContactRequiredOne', + 'required' => 'required', + 'multiple' => 'multiple' + ), + array('option' => array('value' => '1')), 'option A', '/option', + array('option' => array('value' => '2')), 'option B', '/option', + '/select' + ); + $this->assertTags($result, $expected); } /** diff --git a/lib/Cake/View/Helper/FormHelper.php b/lib/Cake/View/Helper/FormHelper.php index d3b7f528d..06c3cab1d 100644 --- a/lib/Cake/View/Helper/FormHelper.php +++ b/lib/Cake/View/Helper/FormHelper.php @@ -2008,6 +2008,14 @@ class FormHelper extends AppHelper { $tag = 'selectstart'; } + if ($tag !== 'checkboxmultiplestart' && + !isset($attributes['required']) && + empty($attributes['disabled']) && + $this->_introspectModel($this->model(), 'validates', $this->field()) + ) { + $attributes['required'] = true; + } + if (!empty($tag) || isset($template)) { $hasOptions = (count($options) > 0 || $showEmpty); // Secure the field if there are options, or its a multi select.