Ara*_*oth 3 cakephp cakephp-3.0
所以,我有一个使用DataTables自动生成的表.我的CakePHP中的一个动作抓取该表的数据,并将其格式化为JSON以供数据表使用,这是格式化的JSON:
<?php
$data = array();
if (!empty($results)) {
foreach ($results as $result) {
$data[] = [
'name' => $result->name,
'cad' => $this->Number->currency($result->CAD, 'USD'),
'usd' => $this->Number->currency($result->USD, 'USD'),
'edit' => '<a href="' .
$this->Url->build(['controller' => 'Portfolios', 'action' => 'edit', $result->id]) .
'"><i class="fa fa-pencil"></i></a>',
'delete' => '<input type="checkbox" class="delete" value="' . $result->id . '">'
];
}
}
echo json_encode(compact('data'));
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我在其中有一个"删除"选项,它输出一个带有相应元素的id值的复选框.选中该复选框后,将显示一个删除按钮,该按钮发送此ajax请求:
$('a#delete').on('click', function(e) {
e.preventDefault();
var checkedValues = [];
$('input.delete:checked').each(function() {
checkedValues.push($(this).val());
});
$.ajax({
url: $(this).attr('href'),
type: 'POST',
data: checkedValues
});
})
Run Code Online (Sandbox Code Playgroud)
这个ajax帖子转到我的控制器动作delete().我遇到的问题是我收到一条错误,指出"无效的Csrf令牌".我知道为什么会这样,我正在提交一个带有Csrf保护的表单,它没有添加Csrf标记.
我无法弄清楚如何为这种情况手动创建Csrf令牌(在页面加载后生成输入值).我也无法弄清楚如何禁用Csrf保护.我读过这篇文章,但是代码放在了beforeFilter函数中,据我所知,这意味着它会在每个动作上运行,而不仅仅是这个动作,这不是我想要的.另外,说实话,我更倾向于一个不停用安全功能的解决方案.
反正有没有为这个特定的操作禁用Csrf,还是有更好的方法来做到这一点?
在这里阅读有关CSRF组件的所有内容
http://book.cakephp.org/3.0/en/controllers/components/csrf.html
您可以在此处禁用特定操作:
public function beforeFilter(Event $event) {
if (in_array($this->request->action, ['actions_you want to disable'])) {
$this->eventManager()->off($this->Csrf);
}
}
Run Code Online (Sandbox Code Playgroud)