3

在我的表中,我有一列,每行都有一个复选框。我希望能够删除所有选定的项目。我从这个网站上找到了代码,并为我自己的东西修改了它。 关联

我遵循网站的复选框命名约定,如下所示:

<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?')); ?>

有几件事我认为可能是问题:

  1. 该代码是为旧版本的蛋糕编写的,我认为该网站说 1.3,但我不知道在现有代码中更新/更正什么以使其工作。
  2. 删除按钮与 cakephp 网站上博客教程中的删除按钮相同。我所做的唯一更改是删除要删除的项目的 id,因为我不是删除单个项目而是删除多个项目。

任何帮助都会很棒。

4

2 回答 2

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()to,Model::deleteAll()因为它运行回调,而deleteAll没有。

最后,您的链接实际上是一个提交按钮。这会将数据发布到控制器。

echo $this->Form->end('Submit');

如果要使用 ajax,请改用JsHelper提交。下面创建了一个 Ajax 提交,它#mytable使用操作的结果更新 dom 元素(在本例中是您重定向到的引用者)。

echo $this->Js->submit('Submit', array(
  'update' => '#mytable'
));
echo $this->Form->end();
于 2012-06-21T14:08:17.757 回答
3

一旦你得到你的复选框列表;而不是使用 foreach 循环来一一删除你的 id 试试这个:

$this->Model->deleteAll(array('Model.column' => array($keys)));
于 2014-01-09T12:59:10.743 回答