CakePHP Form Helper minYear

时间:2013-04-26 17:03:52

标签: cakephp datetime formhelper

我需要生成一年下拉蛋糕,以填充数据库中的ArchiveQuarter.year。目前在数据库中将其设置为“年”,但它与'date'产生相同的结果。

这是当前的设置:

echo $this->Form->input('ArchiveQuarter.year', array(
     'label'=>'Year',
     'type'=>'date',
     'dateFormat'=>'Y',
     'minYear'=>'2000',
     'maxYear'=>date('Y'),
));

问题在于,这会产生一个范围为1970-2013而不是2000-2013的下拉列表。 minYear确实有效,因为如果你将它设置在1970年以下那么它确实会起作用。

2 个答案:

答案 0 :(得分:2)

我将您的代码复制并粘贴到我的CakePHP 2.3.0应用程序中,并按预期工作 - 从2013年到2000年给了我一个选择输入。

也许尝试获取最新版本的CakePHP(您的问题没有列出您正在使用的版本)并试试?

最重要的是,您提供的代码确实有效 - 所以如果不适合您,还有其他因素在起作用。

答案 1 :(得分:0)

我对FormHelper.php文件中的内容进行了一些研究,这是一个细分:

  • 在dateTime()函数中,它检查$ attributes [' value']是否为空。如果是,则使用$ this-> value($ attributes,$ fieldName)填充该信息;填写2013年

  • 2013然后由_GetDateTimeValue()

  • 解析
  • 在_GetDateTimeValue()中,它被解析为数字,并从unix时间转换;到1970年一个半小时。

  • 然后将其设置为最终选择框的值,该选择框必须从minYear扩展到适当容纳。

出于某种原因,Cake没有考虑明确规定的dateFormat =>' Y'何时使用_GetDateTimeValue()进行解析。

解决方案是插入:$selected => strtotime('now'),最终将正确解析。

您还可以明确地将$ selected设置为日期范围之外的值,我不确定之前是否需要。