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)
我认为有几件事可能是问题所在:
任何帮助都会很棒.
你的复选框输入应该是这样的
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)