我遇到的问题是我无法更新我的 CakePHP 3.8 应用程序中的记录,它安装在实时服务器上。在我的开发服务器上它工作正常。
我可以插入新的,我可以删除,我可以选择,但我无法更新任何记录。
(当然,MySQL 用户有权更新记录。)
这就是编辑操作的工作方式,以及从未到达的部分代码:
public function edit($id = null)
{
$activity = $this->Activities->get($id, [
'contain' => []
]);
if ($this->request->is(['patch', 'post', 'put'])) {
// **** THIS PART OF CODE IS NOT EXECUTED AFTER UPDATE
$activity = $this->Activities->patchEntity($activity, $this->request->getData());
if ($this->Activities->save($activity)) {
$this->Flash->success(__('The {0} has been saved.', 'Activity'));
return $this->redirect(['action' => 'index']);
}
$this->Flash->error(__('The {0} could not be saved. Please, try again.', 'Activity'));
}
$lodges = $this->Activities->Lodges->find('list', ['limit' => 200]);
$clients = $this->Activities->Clients->find('list', ['limit' => 200]);
$this->set(compact('activity', 'lodges', 'clients'));
}
我检查过pr($this->request)
,在尝试更新记录时没有“patch”、“post”或“put”方法,只有“get”。但为什么“得到”?
CakePHP 3.8 的 CSRF 组件有什么问题吗?
你能帮我解决这个问题吗?
先感谢您!
更新:这是我的表格:
<?php echo $this->Form->create($activity, ['role' => 'form']); ?>
<div class="box-body">
<?php
echo $this->Form->control('name');
echo $this->Form->control('description');
echo $this->Form->control('price_1');
echo $this->Form->control('price_1_name');
echo $this->Form->control('price_2');
echo $this->Form->control('price_2_name');
?>
</div>
<!-- /.box-body -->
<?php echo $this->Form->submit(__('Submit')); ?>
<?php echo $this->Form->end(); ?>
而且,我在这个应用程序中的每个更新表单上都有同样的问题,在实时服务器上。在开发服务器上它工作正常。
更新 2:
在 mod 安全日志文件中,我收到以下消息:
请求:POST /locations/edit/3 操作说明:访问被拒绝,代码为 403(第 2 阶段)。理由:字符串匹配 REQUEST_COOKIES_NAMES:CAKEPHP 处的“cakephp”。
我在 bootstrap.php 和 app.php 中添加了以下行,但错误消息保持不变:
Configure::write('Session', [
'defaults' => 'php',
'cookie'=>'NICK',
]);