CakePHP - редактирование теряет переменную URL, когда попытка проверки завершается неудачно при сохранении - PullRequest
1 голос
/ 07 апреля 2011

Пользователь начинает здесь:

/admin/cuisines/edit/16

Пользователь вводит что-то, что противоречит правилам проверки, и нажимает кнопку Отправить.Пользователь взят здесь:

/admin/cuisines/edit/16

Пользователь считает, что он действителен, и нажимает кнопку «Отправить» еще раз. Затем он принимается здесь:

/admin/cuisines/edit/

Пользователь исправляет свою ошибку, нажимает кнопку «Отправить», и вместо этогоредактирования, он сохраняет это как новый элемент в таблице, поскольку там нет идентификатора.

Мой код:

    function admin_edit($id = null) { // EDIT ***********

    if (!$id && empty($this->data)) {
        $this->Session->setFlash(__('Invalid cuisine', true));
        $this->redirect(array('action' => 'index'));
    }
    if (!empty($this->data)) {
        if ($this->Cuisine->save($this->data)) {
            $this->Session->setFlash(__('The edits to this cuisine have been saved', true));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The edits to this cuisine could not be saved. Please, try again.', true));
        }
    }
    if (empty($this->data)) {
        $this->data = $this->Cuisine->read(null, $id);
    }
}

Любые мысли о том, что я 'я делаю неправильно?Я думал, что сделал это так же, как учебник, но - я должен был бы предположить, что Cake достаточно умен, чтобы не допустить этого - то есть - я предполагаю, что я делаю что-то не так.

1 Ответ

3 голосов
/ 07 апреля 2011

Чтобы избежать сохранения новых элементов при отправке формы редактирования, убедитесь в наличии поля формы для идентификатора.

<?php echo $this->Form->input('id'); ?>

Это поле будет скрыто автоматически, поскольку оно является основным для моделей.ключ.

Также проверьте атрибут действия формы в HTML.Иногда мне приходится устанавливать его вручную, чтобы избежать ошибок.

<?php echo $this->Form->create('Cuisine', array(
  'url' => array(
    'action' => 'edit',
    $this->Form->value('id')
   )
)); ?>
...