Не удается обновить записи в CakePHP 3.8
У меня проблема в том, что я не могу обновлять записи в моем приложении 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. Но почему "получить"?
Есть ли что-нибудь с CSRF-компонентом CakePHP 3.8?
Вы можете мне помочь с этим, пожалуйста?
Заранее спасибо!
ОБНОВЛЕНО: это моя форма:
<?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:
В файлах журнала безопасности мода я получаю сообщение:
Запрос:POST /locations/edit/3 Описание действия: Доступ запрещен с кодом 403 (фаза 2). Обоснование: строка соответствует "cakephp" в REQUEST_COOKIES_NAMES:CAKEPHP.
Я добавил следующую строку в bootstrap.php и app.php, но сообщение об ошибке осталось прежним:
Configure::write('Session', [
'defaults' => 'php',
'cookie'=>'NICK',
]);
1 ответ
Итак, решение такое:
Да, как я уже писал, мне нужно было добавить следующее в app.php:
Configure::write('Session', [
'defaults' => 'php',
'cookie'=>'NICK',
]);
А после этого удалить куки в браузере.
Надеюсь, это кому-то поможет, я действительно боролся с этим.