2011-03-02 90 views
2

我创建了一个表单,它有一个循环来显示多行。我使用表单助手在每一行上都有一个选择。它创建的ID是一样的,有没有办法添加一个计数器,或一些定义信息的ID?cakePHP:如何更改表单元素的ID(使用表单助手)?

我使用$this->Form->input('city_id')来输出从我的城市模型中选择的城市。所有ID都是ModelCityId。我想获得像ModelCityId1,ModelCityId2ModelCityId3等,这可能吗?还是有更好的方式去显示循环中的选项?

感谢您的任何建议。

这里是代码的相关部分。

while ($current_date != $departure_date) { 
    $current_date = date("d-M-y", strtotime($current_date . " +1 day")); 
    $output .= '<tr>'; 
    $output .= '<td>'.$current_date.'</td>'; 
    // irrelevant other columns 
    $output .= '<td>'.$this->Form->input('city_id', array('label' => '', 'empty' => true)).'</td>'; 
    $output .= '</tr>'; 
} 
+0

'$ current_date = date(“d-M-y”,strtotime(date(“Y-m-d”,strtotime($ current_date))。“+1 day”));' 这条线让我感到困惑。 – Dunhamzzz 2011-03-02 09:12:29

+0

可能有更好的方法来做到这一点,但我用它来添加一天到日期字符串(从网站的另一部分,已经格式化)。 - 仔细一看,意识到我过了一会儿就变得复杂了。更改为'$ current_date = date(“d-M-y”,strtotime($ current_date。“+1 day”));' – 2011-03-02 21:22:55

回答

1

如果id相同,名称也是一样的。这会在您提交数据时混淆您的数据。您正在寻找这样的语法:

$this->Form->input("ModelName.$i.city_id", array(...)) 

使用,你正在做的形式(即相同$this->Form->create('ModelName'))的ModelName

1

编辑:你为什么不能做这样的事情:

$counter = 0; 
while ($current_date != $departure_date) { 
    $current_date = date("d-M-y", strtotime(date("Y-m-d", strtotime($current_date)) . " +1 day")); 
    $output .= '<tr>'; 
    $output .= '<td>'.$current_date.'</td>'; 
    // irrelevant other columns 
    $output .= '<td>'.$this->Form->input('city_id' . $counter, array('label' => '', 'empty' => true)).'</td>'; 
    $output .= '</tr>'; 
    $counter++; 
} 
+0

感谢您的想法@ithcy。我已将代码添加到原始帖子中。我认为改变必须通过输入函数的选项来完成,我只是不确定要查找什么。 – 2011-03-02 06:00:16

+0

看我的编辑。它可能不符合CakePHP的模型绑定或其他类型的字段命名约定,但我不明白为什么它不起作用。 – glomad 2011-03-02 06:03:33

+0

啊......我现在看到了。我不太了解CakePHP。我会试着想出一个更好的答案。 – glomad 2011-03-02 06:07:13

3

由于发痒指出,简单地用一个计数器在while环获得一个唯一的编号。

然后,所有你需要做的就是把它分配给您的ID字段

$this->Form->input('city_id', array('id' => 'somvalue' . $i)); 

假设$i在循环定义。

+0

当我浏览蛋糕文档时,我没有看到ID是我可以设置的选项,所以我甚至都没有想过尝试。它的工作,谢谢你们。 – 2011-03-02 06:44:39

+0

Cake仅列出您可以设置的其他选项(例如 - 默认,之后,之前)。但是,除了类,id,名称等所有html选项外,还可以在该选项数组中设置名称。 – JohnP 2011-03-02 06:49:21

+0

很高兴知道,感谢提示@JohnP – 2011-03-02 21:25:21