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

#php #zend-form #form-submit

#php #zend-form #форма-отправить

Вопрос:

У меня есть форма 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" >
  

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

Ответ №1:

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

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

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

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

Комментарии:

1. В контроллере: if($this->params()->fromPost('save_changes',false)) или if($this->params()->fromPost('delete',false))

Ответ №2:

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

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

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

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

Ответ №3:

На самом деле вы можете получить это с помощью:

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

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

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

Пример:

 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
}
  

Реальная история.

Ответ №4:

 $data = $this->getRequest()->getPost();
if (array_key_exists('save_changes', $data)) {
..
} else if (array_key_exists('delete', $data)) {
..
}
  

Ответ №5:

  $formData = $this->getRequest()->getPost(); 

if($formData['submit']=='save_changes'){ // echo "save chanes" ; }
if($formData['submit']=='delete'){ // echo "delete";}