2

我需要生成一个带有蛋糕的年份下拉列表来填充数据库中的 ArchiveQuarter.year。这目前在数据库中设置为“年份”,但它与“日期”产生了相同的结果。

这是当前的设置:

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

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

4

2 回答 2

2

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

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

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

于 2013-04-26T20:13:29.787 回答
0

我对 FormHelper.php 文件中发生的事情进行了一些研究,下面是一个细分:

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

  • 2013 然后由 _GetDateTimeValue() 解析

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

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

无论出于何种原因,当使用 _GetDateTimeValue() 解析时,Cake 都没有考虑明确声明的 dateFormat=>'Y'。

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

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

于 2013-04-26T22:35:27.157 回答