Cake 2.2.4
我有一个数据库sport_year
字段设置为YEAR数据类型。
我已经尝试了两种方法来为我的添加/编辑视图创建年份菜单,但两者都有自己的问题。
使用$this->Form->input
:
echo $this->Form->input('sport_year', array(
'type' => 'date',
'dateFormat' => 'Y',
'name' => 'data[Sport][sport_year]',
'minYear' => date('Y') - 2,
'maxYear' => date('Y') + 1,
'label' => 'Year',
'empty' => '- select -'
));
代码可以很好地添加或编辑数据(与验证一样),但是当到达编辑页面时,现有年份的数据未在表单中正确选择。数据数组确实显示[sport_year] => 2012
,但未在菜单中选择2012。
echo $this->Form->year(
'sport_year',
date('Y') - 2,
date('Y') + 1,
array(
'name' => 'data[Sport][sport_year]',
'label' => 'Year',
'empty' => '- select -'
)
);
年助手似乎正确检索并选择现有数据,但标签不起作用,即使我的模型已设置验证,它也无法正确呈现该字段。它仍然需要数据,但它忽略了我的Model自定义消息,并且在我的控制器中回退到保存错误消息。
答案 0 :(得分:1)
$this->Form->year()
永远不会显示标签。只有$this->Form->input()
添加标签,因为它是一种包装方法,year()
用于创建年份字段。
蛋糕中的代码类似于:
public function input() {
echo '<div>';
echo $this->label(...);
echo $this->year(...);
echo '</div>';
}
使用此代码,您不需要name
,因为蛋糕已经生成了。如果您不在Sport
模型中,则可以使用input('Sport.sport_year', ...)
如果您阅读了文档,则应该看到输入有default
选项。您可以使用它或确保$this->request->data['Sport']['sport_year']
设置为您想要的年份。
您也可以设置value
选项。
echo $this->Form->input('sport_year', array(
'type' => 'date',
'dateFormat' => 'Y',
'minYear' => date('Y') - 2,
'maxYear' => date('Y') + 1,
'label' => 'Year',
'empty' => '- select -',
'default' => date('Y')
));
或
echo $this->Form->input('sport_year', array(
'type' => 'date',
'dateFormat' => 'Y',
'minYear' => date('Y') - 2,
'maxYear' => date('Y') + 1,
'label' => 'Year',
'empty' => '- select -',
'value' => date('Y')
));
答案 1 :(得分:0)
对于选项1执行此操作:
echo $this->Form->input('sport_year', array(
...
'selected' => 'data[Sport][sport_year]'
));