1

蛋糕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 -'
    )
);

年份助手似乎可以正确检索和选择现有数据,但标签不起作用,即使我的模型具有验证集,它也无法按要求正确呈现字段。它仍然需要数据,但它忽略了我的模型自定义消息并回退到我的控制器中的保存错误消息。

4

2 回答 2

1

$this->Form->year()永远不会显示标签。仅$this->Form->input()添加标签,因为它是一种包装方法并且year()用于创建年份字段。

cake 中的代码类似于:

public function input() {
    echo '<div>';
    echo $this->label(...);
    echo $this->year(...);
    echo '</div>';
}

使用此代码,您不需要name,因为 cake 已经生成了。如果您不在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')
));
于 2012-12-30T22:55:16.607 回答
0

For option 1 do this:

echo $this->Form->input('sport_year', array(
    ...
    'selected' => 'data[Sport][sport_year]'
));
于 2014-07-28T17:33:18.853 回答