无法更新CakePHP 3.8中的记录

问题描述 投票:0回答:1

问题是我无法更新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组件有东西吗?

您能帮我这个吗?

谢谢您!

UPDATED:这是我的表格:

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

而且,在实时服务器上,此应用程序中的每个更新表单都存在相同的问题。在开发服务器上,它可以正常工作。

UPDATE 2:

在mod安全日志文件中,我收到消息:

Request:POST / locations / edit / 3动作说明:访问被代码403拒绝(阶段2)。理由:字符串匹配“ cakephp”,位于REQUEST_COOKIES_NAMES:CAKEPHP。

我在bootstrap.php和app.php中添加了以下行,但错误消息仍然相同:

   Configure::write('Session', [
        'defaults' => 'php',
        'cookie'=>'NICK',
    ]);
cakephp cakephp-3.x cakephp3 cakephp-3.8
1个回答
0
投票

所以,解决方法是这样:

是的,就像我写的一样,我需要在app.php中添加下一个:

Configure::write('Session', [
'defaults' => 'php',
'cookie'=>'NICK',
]);

然后删除浏览器中的cookie。

希望这对某人有帮助,我真的很难解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.