在我的表格中,我有一列,每行都有一个复选框。我希望能够删除所有选定的项目。我从这个网站上找到了代码,并为我自己的东西修改了它。 Link
我遵循网站对复选框的命名约定,如下所示:
<td> <?php echo $this->Form->checkbox('LocalClocks.id.['.$LocalClock['LocalClock']['id'].']', array('value' => $LocalClock['LocalClock']['id'])); ?></td>
这是我的 Controller 中 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?')); ?>
我认为有几件事可能是问题:
- 代码是为旧版本的 cake 编写的,我认为网站上说的是 1.3,但我不知道在现有代码中更新/更正什么才能使其正常工作。
- 删除按钮与 cakephp 网站博客教程中的删除按钮相同。我所做的唯一更改是删除要删除的项目的 id,因为我删除的不是单个项目,而是多个项目。
任何帮助都会很棒。
最佳答案
您的复选框输入应该是这样的
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
不.
最后,您的链接实际上是一个提交按钮。这会将数据 POST 到 Controller 。
echo $this->Form->end('Submit');
如果您想使用 ajax,请使用 JsHelper改为提交。下面创建一个 Ajax 提交,用操作的结果更新 dom 元素 #mytable
(在本例中是您重定向到的引用者)。
echo $this->Js->submit('Submit', array(
'update' => '#mytable'
));
echo $this->Form->end();
关于cakephp - 从表中删除多个选定项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11139832/