Как определить, какая кнопка отправки была нажата в форме 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" >
В контроллере как определить какую кнопку пользователь нажал?
5 ответов
В вашем случае вы должны просто иметь возможность проверить
if(isset($_POST['save_changes'])
// or
if(isset($_POST['delete'])
Так как будет представлено только значение нажатой кнопки.
Обычно вы даете обеим кнопкам одинаковое имя (например, действие), а затем задаете значение для действия, которое вы хотите выполнить. К сожалению, это не очень хорошо работает с IE. Проверьте эту страницу для получения дополнительной информации о различных решениях для нескольких кнопок отправки.
Поскольку вы используете Zend, я бы порекомендовал более Zend-Ish подход.
Вы можете вызывать элементы напрямую по их именам, а в Zend есть метод для кнопок форм (кнопки, сброс, отправка), вызываемый 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($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";}