从表中删除多个选定的项目

RXC*_*RXC 3 checkbox controller cakephp

在我的表中,我有一个列,每行都有一个复选框.我希望能够删除所有选定的项目.我找到了这个网站的代码,并根据我自己的东西进行了修改. 链接

我按照网站的复选框命名约定,如下:

<td>  <?php echo $this->Form->checkbox('LocalClocks.id.['.$LocalClock['LocalClock']['id'].']', array('value' => $LocalClock['LocalClock']['id'])); ?></td>
Run Code Online (Sandbox Code Playgroud)

这是我的控制器中deleteSelected()函数的代码:

    public function deleteSelected()
    {
        foreach($this->data['LocalClocks'] as $key => $value)
        {
            if($value != 0)
            {
                $this->LocalClock->del($value);
            }
        }
        $this->redirect($this->referer());
    }
Run Code Online (Sandbox Code Playgroud)

这是实际删除按钮的代码(以防万一需要):

<?php echo $this->Form->postLink('Delete Selected', array('action' => 'deleteSelected'), array('confirm' => 'Are you sure?')); ?>
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助都会很棒.

jer*_*ris 5

你的复选框输入应该是这样的

echo $this->Form->checkbox('LocalClocks.'.$LocalClock['LocalClock']['id'], array(
  'value' => $LocalClock['LocalClock']['id'],
  'hiddenField' => false
));
Run Code Online (Sandbox Code Playgroud)

这将创建一个如下所示的数据数组

array(
  'LocalClocks' => array(
    1 => 1,
    42 => 1
  )
);
Run Code Online (Sandbox Code Playgroud)

并且将省略数据数组中任何未经检查的数据,因为我们没有使用隐藏字段.最后,只需对您的操作进行一些更改即可

public function deleteSelected()
{
    foreach($this->request->data['LocalClocks'] as $key => $value)
    {
       $this->LocalClock->delete($key);
    }
    $this->redirect($this->referer());
}
Run Code Online (Sandbox Code Playgroud)

我更喜欢使用Model::delete(),Model::deleteAll()因为它运行回调,而deleteAll不是.

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

echo $this->Form->end('Submit');
Run Code Online (Sandbox Code Playgroud)

如果要使用ajax,请使用JsHelper来提交它.下面创建一个Ajax提交,#mytable使用操作的结果更新dom元素(在这种情况下是您重定向到的引用).

echo $this->Js->submit('Submit', array(
  'update' => '#mytable'
));
echo $this->Form->end();
Run Code Online (Sandbox Code Playgroud)