Navigation Menu

Skip to content

Commit

Permalink
Add date type to FormHelper.
Browse files Browse the repository at this point in the history
Add a concrete method for generating date inputs and remove workarounds
in _getInput().
  • Loading branch information
markstory committed Mar 10, 2014
1 parent 2eb552f commit 63b2dd4
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 7 deletions.
46 changes: 39 additions & 7 deletions src/View/Helper/FormHelper.php
Expand Up @@ -887,8 +887,6 @@ protected function _getInput($fieldName, $options) {
case 'url':
$options = $this->_initInputField($fieldName, $options);
return $this->widget($options['type'], $options);
case 'date':
return $this->dateTime($fieldName, $options);
default:
return $this->{$options['type']}($fieldName, $options);
}
Expand Down Expand Up @@ -1986,14 +1984,10 @@ protected function _datetimeOptions($options) {
* - `timeFormat` The time format to use, either 12 or 24.
* - `second` Set to true to enable seconds drop down.
*
* To control the order of inputs, and any elements/content between the inputs you
* can override the `dateWidget` template. By default the `dateWidget` template is:
*
* `{{month}}{{day}}{{year}}{{hour}}{{minute}}{{second}}{{meridian}}`
*
* @param string $fieldName Prefix name for the SELECT element
* @param array $options Array of Options
* @return string Generated set of select boxes for time formats chosen.
* @see Cake\View\Helper\FormHelper::dateTime() for templating options.
*/
public function time($fieldName, $options = []) {
$options += [
Expand All @@ -2011,6 +2005,44 @@ public function time($fieldName, $options = []) {
return $this->widget('datetime', $options);
}

/**
* Generate date inputs.
*
* ### Options:
*
* ### Options:
*
* - `monthNames` If false, 2 digit numbers will be used instead of text.
* If a array, the given array will be used.
* - `minYear` The lowest year to use in the year select
* - `maxYear` The maximum year to use in the year select
* - `empty` - If true, the empty select option is shown. If a string,
* that string is displayed as the empty element.
* - `value` | `default` The default value to be used by the input. A value in `$this->data`
* matching the field name will override this value. If no default is provided `time()` will be used.
*
* @param string $fieldName Prefix name for the SELECT element
* @param array $options Array of Options
* @return string Generated set of select boxes for time formats chosen.
* @see Cake\View\Helper\FormHelper::dateTime() for templating options.
*/
public function date($fieldName, $options = []) {
$options += [
'empty' => true,
'value' => null,
'monthNames' => true,
'minYear' => null,
'maxYear' => null,
'orderYear' => 'desc',
];
$options['hour'] = $options['minute'] = false;
$options['meridian'] = $options['second'] = false;
$options = $this->_initInputField($fieldName, $options);
$options = $this->_datetimeOptions($options);

return $this->widget('datetime', $options);
}

/**
* Sets field defaults and adds field to form security input hash.
* Will also add the error class if the field contains validation errors.
Expand Down
18 changes: 18 additions & 0 deletions tests/TestCase/View/Helper/FormHelperTest.php
Expand Up @@ -3820,6 +3820,24 @@ public function testTime() {
$this->assertNotContains('day', $result);
}

/**
* Test the date type.
*
* @return void
*/
public function testDate() {
$result = $this->Form->date('start_day', array(
'value' => array('year' => '2014', 'month' => '03', 'day' => '08')
));
$this->assertContains('<option value="2014" selected="selected">2014</option>', $result);
$this->assertContains('<option value="03" selected="selected">March</option>', $result);
$this->assertContains('<option value="08" selected="selected">8</option>', $result);
$this->assertNotContains('hour', $result);
$this->assertNotContains('minute', $result);
$this->assertNotContains('second', $result);
$this->assertNotContains('meridian', $result);
}

/**
* testDateTime method
*
Expand Down

0 comments on commit 63b2dd4

Please sign in to comment.