CakePHP的:创建基于是否将它设置

问题描述:

复选框和更新域的阵列我不知道如果我要问的是可能的,但这里的情景:CakePHP的:创建基于是否将它设置

我有一个foreach()循环返回在HTML格式的一些值:

<?php foreach($stuff as $s) { ?> 
<tr> 
    <td><?php echo $s['Model']['data']; ?> </td> 
</tr> 
<?php } ?> 

,我需要做的就是把旁边的复选框每个$s['Model']['data'],最好$s['Model']['data']作为标签,并可以设置基于框是否在表中的值检查。所以,我edit.ctp应该是这样的:

<?php foreach($stuff as $s) { ?> 
<tr> 
    <td><?php echo $this->Form->input('flag', array('type'=>'checkbox, 'default'=>'', label=>' $s['Model']['data']', 'value'=>1)); ?> </td> 
</tr> 
<?php } ?> 

我没有问题显示上述内容。我的问题是,我不知道如何告诉我的控制器更新必要的字段,如果标签框被选中。这是我第一次运行它:

if($this->request->save($this->request->data)) { 
    foreach($stuff as $s) { 
     $this->Model->id = $s['Model']['id']; 
     if(isset($this->request->data['FormName']['flag'])) { 
      $this->Model->set('flag', 1); 
      $this->Model->save('flag', true); 
     } 
    } 
} 

在运行时没有错误,但没有任何反应。模型I中的flag字段需要更新仍然= 0。我可以调试$stuff并查看数据,所以我知道它在那里。我也知道我的编辑功能正在触及foreach()循环。我可能会错过什么?我是否需要为复选框分配不同的值或检查是否设置了其他方式?

您似乎需要通过修改每个复选框的名称来标识当前项目的每个复选框,否则它将只使用最后一个复选框的值来表示所有项目。

<?php foreach($stuff as $i => $s) { ?> 
<tr> 
    <td><?php echo $this->Form->input('flag'.$i, array('type'=>'checkbox, 'default'=>'', label=>' $s['Model']['data']', 'value'=>1)); ?> </td> 
</tr> 
<?php } ?> 

然后在控制器中查找特定的标志

if($this->request->save($this->request->data)) { 
    foreach($stuff as $i => $s) { 
     $this->Model->id = $s['Model']['id']; 
     if(isset($this->request->data['FormName']['flag'.$i])) { 
      $this->Model->set('flag', 1); 
      $this->Model->save('flag', true); 
     } 
    } 
} 

即假设在$东西HT元素始终以相同的顺序。

+0

当我把你的修改,我可以输出索引,并确认每个复选框都有一个唯一的。我不太清楚如何修改我的控制器来确定检查哪些索引。 – Chris

+1

更新,基本上你必须做同样的事情来访问新的国旗名称 –

+0

成功!谢谢。我把索引放在控制器的错误位置。 – Chris