Почему CakePHP добавляет новые строки, когда "post" заменяется на "get"?
Я редактирую строку в таблице Post или добавляю новую строку из функции edit() в PostsController. Функция выглядит так:
public function edit($id = null) {
// Has any form data been POSTed?
if ($this->request->is('post')) { //Replaced 'post' by 'get' in this line
// If the form data can be validated and saved...
if ($this->Post->save($this->request->data)) {
// Set a session flash message and redirect.
$this->Session->setFlash('Updated the Post!');
return $this->redirect('/posts');
}
}
// If no form data, find the post to be edited
// and hand it to the view.
$this->set('post', $this->Post->findById($id));
}
Я просто заменил "post" на "get", чтобы увидеть, что произойдет, и он продолжал создавать новые строки, даже не приводя меня к форме. Я все еще получаю флэш-сообщение 'Updated the Post!'
, но без каких-либо данных формы.
Если требуется код в edit.ctp, вот он:
<?php
echo $this->Form->Create('Post');
echo $this->Form->input('id', array('type' => 'hidden','default'=>$post['Post' ['id']));
echo $this->Form->input('title',array('default'=>$post['Post']['title']));
echo $this->Form->input('body',array('default'=>$post['Post']['body']));
echo $this->Form->end('Update');
?>
Есть мысли о том, почему это может происходить?
Редактировать: Добавлена версия CakePHP
Я использую CakePHP 2.4.5
1 ответ
То, что вы делаете, не имеет смысла. Почему вы хотите поменять "пост" на "получить" здесь? Конечно, он будет генерировать новые строки, так как вы эффективно инициируете сохранение при каждой загрузке страницы (GET). Не делай этого. Код, который у вас был, был просто прекрасен - ЕСЛИ вы также приняли во внимание PUT. Для редактирования форм это не пост, а:
if ($this->request->is('put')) {}
PS: Если вы хотите убедиться, что он всегда работает как для добавления / редактирования, используйте
if ($this->request->is(array('post', 'put')) {}
Но НИКОГДА не заменяйте его на "получить".