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