CakePHP使用FormHelper一年的菜单有问题

时间:2012-12-28 20:40:16

标签: cakephp formhelper

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自定义消息,并且在我的控制器中回退到保存错误消息。

2 个答案:

答案 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]'
));