2012-04-10 1 views
0

На мой взгляд, у меня есть форма с кнопками отправки и отмены. Оба действия возвращают меня на мою индексную страницу. Единственное различие заключается в том, что Submit отправляет нормальный db submit и отображает сообщение «Ваш счет был обновлен», тогда как «Отмена» должна отменить обновление и отобразить «Обновить отменено». Здесь нет кода контроллера:Кнопка CakePHP Cancel не срабатывает

public function edit($id = null) { 
    $this->Invoice->id = $id; 
    $this->set('invoice', $this->Invoice->read(null, $id)); 
    //Check for $_GET 
    if ($this->request->is('get')) { 
     $this->request->data = $this->Invoice->read(); 
    } else { 
     // Bail if cancel button pressed 
     if (isset($this->params['form']['cancel'])) { 
      $this->Session->setFlash('Update canceled.'); 
      $this->redirect(array('action' => 'index')); 
     } else if ($this->Invoice->save($this->request->data)) { 
      $this->Session->setFlash('Your Invoice has been updated.'); 
      $this->redirect(array('action' => 'index')); 
     } else { 
      $this->Session->setFlash('Unable to update your Invoice.'); 
     } 
    } 
} 

А вот вид:

<fieldset> 
<legend>Enter New Values</legend> 
<li><?php echo $this->Form->input('purchaseOrderNumber'); ?></li> 
<li><?php echo $this->Form->input('siteAddress'); ?></li> 
<li><?php echo $this->Form->input('siteCity'); ?></li> 
<li><?php echo $this->Form->input('siteState'); ?></li> 
<?php 
echo $this->Form->button('Submit Form', array('type' => 'submit')); 
echo $this->Form->submit('Cancel', array('div' => false, 'name' => 'cancel')); 
?> 

Однако, независимо от того, который при нажатии кнопки, он всегда возвращает первое сообщение. Он также выполняет db submit.

Я безуспешно пытался использовать XDebug с Netbeans, но это история в другое время. Обычно мои ошибки очевидны для других. Итак, я надеюсь, кто-то сможет вернуть меня в нужное русло.

+0

Каков вывод, если вы положили это сразу после вашего заявления else и нажмите отменить? 'Отладки ($ this-> PARAMS); exit; ' – Wylie

+0

Я только что связался с ссылкой на индекс –

ответ

1

Я работал над одной и той же проблемой, и я нашел решение, которое работает без простой ссылки на индекс. По предложению Уайли для отладки $this->params, я заметил, что массив 'form' не был создан. Тем не менее, существовал массив под названием «данные», в котором был определен параметр «cancel». кнопку Так в контроллере, где вы проверяете, какая кнопка была нажата, вместо

if (isset($this->params['form']['cancel'])) { 

использования

if (isset($this->params['data']['cancel'])) { 

и вы получите работу отменить.