Как определить, какая кнопка отправки была нажата в форме Zend Framework?

У меня есть форма Zend Framework, в которой есть две кнопки отправки

$changes = new Zend_Form_Element_Submit('save_changes'); $changes->setLabel('Save Changes'); $delete = new Zend_Form_Element_Submit('delete'); $delete->setLabel('Delete'); 

Что делает HTML таким:

 <input type="submit" name="save_changes" id="user_save_changes" value="Save Changes" > <input type="submit" name="delete" id="user_delete" value="Delete" > 

В контроллере, как определить, какую кнопку нажал пользователь?

В вашем случае вы должны просто проверить

 if(isset($_POST['save_changes']) // or if(isset($_POST['delete']) 

Поскольку будет отправлено только значение кнопки с нажатой кнопкой.

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

Поскольку вы используете Zend, я бы рекомендовал более подход Zend-ish.

Вы можете вызывать элементы напрямую по их именам, а у Zend есть метод для кнопок формы (кнопки, сброс, isChecked() ), называемый isChecked() .

в вашем коде это будет:

 if ($form->save_changes->isChecked()) { // Saving ... else if ($form->delete->isChecked()) { // Removing ... 

Фактически вы можете получить это:

 if($this->getRequest()->getPost('save_changes'){ //Code here } if($this->getRequest()->getPost('delete'){ //Code here } 

Причина, по которой я сделал два условия if, потому что вы не можете сделать, если иначе, потому что вы загружаете эту страницу, даже если вы не нажали кнопку отправки, другое условие будет выполнено.

Пример:

 if($this->getRequest()->getPost('save_changes'){ //once you load this will become true because you didn't click this }else{ //once you load this page this will become true because you didn't click the save_changes submit button } 

Правдивая история.

 $data = $this->getRequest()->getPost(); if (array_key_exists('save_changes', $data)) { .. } else if (array_key_exists('delete', $data)) { .. } 
  $formData = $this->getRequest()->getPost(); if($formData['submit']=='save_changes'){ // echo "save chanes" ; } if($formData['submit']=='delete'){ // echo "delete";}