【问题标题】:CakePHP Form Helper minYearCakePHP 表单助手 minYear
【发布时间】:2013-04-26 17:03:51
【问题描述】:

我需要生成带有蛋糕的年份下拉列表以填充数据库中的 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 以下,那么它确实可以工作。

【问题讨论】:

  • 尝试将其作为整数(不是字符串)。还要确保您尝试最新的 master 分支(最近几天刚刚修复了一些问题)。
  • 我尝试了一个整数,使用 date() 函数等;它们都没有任何效果。我会用核心四处寻找,看看我是否能弄清楚发生了什么。
  • 我用我发现的内容添加了完整的答案。

标签: cakephp datetime formhelper


【解决方案1】:

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

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

归根结底,您提供的代码确实有效 - 因此,如果它不适合您,还有其他因素在起作用。

【讨论】:

    【解决方案2】:

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

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

    • 然后由_GetDateTimeValue()解析2013

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多