在我的表中,我有一个列,每行都有一个复选框。我希望能够删除所有选定的项目。我找到了这个网站的代码,并根据我自己的东西进行了修改。 Link
我按照网站的复选框命名约定进行操作,如下所示:
<td> <?php echo $this->Form->checkbox('LocalClocks.id.['.$LocalClock['LocalClock']['id'].']', array('value' => $LocalClock['LocalClock']['id'])); ?></td>
这是我的控制器中deleteSelected()函数的代码:
public function deleteSelected()
{
foreach($this->data['LocalClocks'] as $key => $value)
{
if($value != 0)
{
$this->LocalClock->del($value);
}
}
$this->redirect($this->referer());
}
这是实际删除按钮的代码(以防万一需要):
<?php echo $this->Form->postLink('Delete Selected', array('action' => 'deleteSelected'), array('confirm' => 'Are you sure?')); ?>
我认为可能存在一些问题:
任何帮助都会很棒。
答案 0 :(得分:5)
您的复选框输入应该是这样的
echo $this->Form->checkbox('LocalClocks.'.$LocalClock['LocalClock']['id'], array(
'value' => $LocalClock['LocalClock']['id'],
'hiddenField' => false
));
这将创建一个看起来像这样的数据数组
array(
'LocalClocks' => array(
1 => 1,
42 => 1
)
);
并且将省略数据数组中任何未经检查的,因为我们没有使用隐藏字段。最后,只需对您的操作进行一些更改
public function deleteSelected()
{
foreach($this->request->data['LocalClocks'] as $key => $value)
{
$this->LocalClock->delete($key);
}
$this->redirect($this->referer());
}
我更喜欢将Model::delete()
用于Model::deleteAll()
,因为它会运行回调,deleteAll
则不会。
最后,您的链接实际上是一个提交按钮。这会将数据发布到控制器。
echo $this->Form->end('Submit');
如果您想使用ajax,请使用JsHelper代替提交。以下内容创建了一个Ajax提交,它使用操作的结果更新dom元素#mytable
(在这种情况下是您重定向到的引用)。
echo $this->Js->submit('Submit', array(
'update' => '#mytable'
));
echo $this->Form->end();
答案 1 :(得分:3)
一旦你拿到了复选框的清单;而不是使用foreach循环逐个删除你的ID试试这个:
$this->Model->deleteAll(array('Model.column' => array($keys)));