Обновите ваш взгляд:
<?php
echo $this->Form->create("Setting", array('action' => 'index'));
echo $this->Form->input('id', array('type' => 'hidden'));
echo $this->Form->checkbox('blog_state');
echo $this->Form->end('Save Page');
?>
Вам также необходимо убедиться, что вы установили идентификатор в функции, чтобы он правильно заполнял значение. Запись не может быть обновлена, если ей не известен идентификатор PK, который она обновляет.
Это можно сделать, установив его в данных запроса:
$this->request->data['Setting']['id'] = $id;
Тогда это будет автоматически установлено в представлении.
UPDATE
Похоже, ваша логика может быть ошибочной. Форма не обязательно будет передавать идентификатор обратно в URL. Так что обновите свою форму и проверьте еще раз, работает ли она. Похоже на то, что у вас сейчас есть, он установит ID на нуль, что создаст новую запись.
public function index($id = 0){
if (empty($this->request->data)) {
$this->Setting->id = $id;
$this->request->data = $this->Setting->read();
} else {
if ($this->request->is('post')) {
$this->Setting->save($this->request->data);
$this->Session->setFlash('This should have saved...');
}
}
}