为什么这段代码会产生一个带有双数组键名的表单输入字段,如下面的html输出
所示 echo $this->Form->input(
'year', array(
'div' => false,
'id' => 'year',
'label' => false,
'type' => 'date',
'dateFormat' => 'Y',
'minYear' => date('Y') - 30,
'maxYear' => date('Y') + 1,
'selected' => date('Y-m-d', strtotime('+1 month')),
)
);
上面代码的html输出
<label class="select">
Year <select name="data[InvoiceRun][year][year]" id="yearYear">
<option value="2015" selected="selected">2015</option>
<option value="2014">2014</option>
<option value="2013">2013</option>
<option value="2012">2012</option>
..........
</select>
</label>
答案 0 :(得分:1)
这是因为您已选择输入类型为“日期”。 “日期”通常会选择日,月,年,所以即使您将其格式化为只有年份输入,它仍然表现得好像会有其他输入。
如果您在http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#field-naming-conventions
上查看食谱FormHelper在内部使用多个字段后缀进行日期时间输入 创建。如果您使用的是名为年,月,日,小时的字段, 分钟,或经络,并有问题得到正确的输入,你 可以设置name属性以覆盖默认行为:
echo $this->Form->input('Model.year', array(
'type' => 'text',
'name' => 'data[Model][year]'
));
换句话说,以下内容应该有效:
echo $this->Form->input(
'year', array(
'name' => 'data[InvoiceRun][year]', //new setting
'div' => false,
'id' => 'year',
'label' => false,
'type' => 'date',
'dateFormat' => 'Y',
'minYear' => date('Y') - 30,
'maxYear' => date('Y') + 1,
'selected' => date('Y-m-d', strtotime('+1 month')),
)
);
如果没有,则另一个选项是将输入创建为“select”类型,并根据当前年份重新创建年份选项。