Zend_Form mit mehreren Submit-Buttons

Benötigt man für ein Zend Formular mehrere Ausgänge, so bieten sich folgende Lösungen an:

  • Buttons, die per Javascript Aktionen auslösen
  • mehrere Submitbuttons

Variante 2 lässt sich recht einfach umsetzen. Zunächst ein Blick in den interessanten Teil des Formulars:

$delete = new Zend_Form_Element_Submit('delete');
$delete->setLabel('Löschen');

$duplicate = new Zend_Form_Element_Submit('duplicate');
$duplicate->setLabel('Duplizieren');

$submit = new Zend_Form_Element_Submit('submit');
$submit->setLabel('Absenden')

$this->addElements(array($delete, $duplicate, $submit));

Wir haben also drei verschiedene Submitbuttons angelegt und diese dann dem Formular zugewiesen. Als nächstes schauen wir uns die Formularverarbeitung bspw. im Controller an:

$form = new MyNewForm();
if ($this->getRequest()->isPost()) {
    $formData = $this->getRequest()->getPost();

    if ($form->submit->isChecked() 
        && $form->isValid($formData)) {
        // Form valide und Submitbutton wurde gedrückt
    }

    if ($form->delete->isChecked() 
        && $form->isValid($formData)) {
        // Form valide und Delete-Button wurde gedrückt
    }

    if ($form->duplicate->isChecked() 
        && $form->isValid($formData)) {
        // Form valide und Duplicate-Button wurde gedrückt
    }
}

Wir prüfen also zunächst, ob das Formular abgeschickt wurde, danach ob das Formular valide ist und der jeweilige Button gedrückt wurde. Über die Methode isChecked() des jeweiligen Formularelements bekommen wir jetzt recht simpel heraus, ob der Button gedrückt wurde.

[via]