有没有一种方法可以在CakePHP日期表单输入中设置默认日期?

3

我有这个:

<?php echo $this->Form->input('Schedule.0.end_date', array(
    'minYear' => date('Y'),
    'maxYear' => date('Y')+5
)); ?>

我希望能将默认日期设置为今天以外的某个日期。使用CakePHP表单助手是否有可能实现这一点?
我发现一篇文章介绍了如何使用TIME来实现此功能,但是尝试通过设置“day”、“month”、“year”等参数并没有起到作用。
4个回答

13

您可以使用 $this->Form->input();selected 参数来实现。 像这样尝试:

<?php
echo $this->Form->input('datetime', array(
  'label' => 'Date 1',
  'selected' => array(
    'day' => '',
    'month' => '',
    'year' => '',
    'hour' => '',
    'minute' => '',
    'second' => ''
    )
  ));
/* What's interesting... this will work aswell: */
echo $this->Form->input('datetime', array(
  'label' => 'Date 2',
  'selected' => '0000-00-00 00:00:00'
  ));
?>

1
我正在使用Cake 2.3,它需要使用“min”而不是“minute”。 - Vinicius Braz Pinto
2
在 Cake 2.x 中,我必须使用 'value' 而不是 'selected'。详见 Cake cookbook - Voodoo
@Voodoo 在 Cake 2.x 中,你需要使用 'default' 值,而不是 'value'。它并不是用来设置你想要的行为值,而是设置默认值,如果设置了值,则该值将替换默认值!根据文档。 - Pipo
在Cake 2.x中,你应该使用'min'代替'minute'。 - Yuchao Zhou

5
Cake 3.*用户需要注意:现在为了预编译日期时间字段,必须使用“default”关键字。
echo $this->Form->input('datetime', array(
  'label' => 'Date 2',
  'default' => '2015-09-10 06:40:00'
));

谢谢你确认了这个问题,我之前不确定。我卡住了,因为如果在实体中有一个自定义的_getDate函数,它会覆盖并阻止您使用默认值。但是为什么在添加视图时会生效,我认为这只适用于编辑。 - artSir

0

使用CakePHP 2.x版本,

echo $this->Form->input('end', array(
     'selected' => array(
         'day' => date('d'), 
         'month' => date('m'), 
         'year' => date('Y'), 
         'hour' => date('h'), 
         'min' => date('i'), 
         'meridian' => date('a')
)));

如果你想要以英文单词显示月份:

$month = DateTime::createFromFormat('!m', date('m'));
$month->format('F');

echo $this->Form->input('end', array(
     'selected' => array(
         'day' => date('d'), 
         'month' => $month->format('F'), 
         'year' => date('Y'), 
         'hour' => date('h'), 
         'min' => date('i'), 
         'meridian' => date('a')
)));

0
使用表单助手中的“selected”选项的问题在于,如果您提交表单,那么提交的值将被选定的值覆盖,因此,如果页面由于错误或其他原因重新加载,则用户将失去最初提交的内容。
如果尚未设置默认值,则我更喜欢在控制器中设置默认值,否则它将由上次提交填充。
在控制器中:
if (!isset($this->request->data['start_date']))
        $this->request->data['start_date'] = date('Y-m-d', strtotime('-1 month'));

这种方式可以让用户在第一次加载表单时看到一个理想的默认值,但如果他们提交了表单并被带回到它,他们选择的值仍然会被选中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接