(hier: Abfrage vor Löschaktion im BugController)1. Zend_Tool ausführen: zf create action delete bug erzeugt entsprechende deleteAction im BugController.php und /views/scripts/bug/delete.phtml mit Dumm
(hier: Abfrage vor Löschaktion im BugController)
zf create action delete bug
erzeugt entsprechende deleteAction im BugController.php und /views/scripts/bug/delete.phtml mit Dummy-Inhalt.
application/forms/BugDeleteForm.php
Formularelemente in der Klasse definieren (hier mit ein paar Extras, s. Kommentare):
<?php
class Form_BugDeleteForm extends Zend_Form {
public function init() {
$this->removeDecorator('DtDdWrapper');// funktioniert nicht, muss fuer alle Formelemente doch extra gesetzt werden
$this->setDecorators(array('FormElements','Form')); // entfernt dl-Wrapper des gesamten Formulars
$this->setAttribs(array('class' => 'form')); // Klasse fuer form-tag
$id = $this->createElement('hidden','id', array ('decorators' => array('ViewHelper'))); // entfernt 'DtDdWrapper'
$this->addElement($id);
$confirmed = $this->createElement('hidden','confirmed', array ('value' => 1 , 'decorators' => array('ViewHelper')));
$this->addElement($confirmed);
$this->addElement('submit', 'submit', array(
'label' => 'Bugreport löschen',
'decorators'=>array( 'ViewHelper'),// entfernt 'DtDdWrapper'
'attribs' => array( 'class' => 'button'))); // Klasse fuer button
$btnBack = new Zend_Form_Element_Button('btnBack'); // setzt Button-Element
$btnBack->setLabel('abbrechen')
->setAttribs(array(
'id' => 'back',
'onclick' => 'javascript: history.back();',
'class' => 'button',
))
->removeDecorator('DtDdWrapper'); // wichtig
$this->addElement($btnBack);
// Button-Elemente zu einer Gruppe zusammenfassen
$this->addDisplayGroup(array(
'submit',// hier kann die Reihenfolge noch geaendert werden
'btnBack',
), 'Buttons', array('legend' => 'Aktion') ); // legend wird hier nicht gezeigt -> Grund?
$this->getDisplayGroup('Buttons')->setDecorators(array(
'FormElements',
array('HtmlTag', array('tag' => 'div', 'class' => 'buttons')), // setzte umschliessenden Tag fuer die Gruppe -> nuetzlich!
));
}
}
public function deleteAction()
{
$bugModel = new Model_Bug();
$id = $this->_request->getParam('id');
$bugDeleteForm = new Form_BugDeleteForm();
$bugDeleteForm->setAction('/bug/delete/id/'.$id);
$bugDeleteForm->setMethod('post');
if ($this->getRequest()->isPost()) {
if ($this->_request->getParam('confirmed')){
$bugModel->deleteBug($id);
return $this->_forward('list');
}
} else {
$bug = $bugModel->find($id)->current();
$bugDeleteForm->populate($bug->toArray());
$this->view->id = $id; // id der view übergeben
$this->view->form = $bugDeleteForm;
}
}
Besonderheit: wenn das Formular versendet wurde und eine Variabel ("confirmed") vorhanden ist, wird die Löschaktion gestartet.Diese ist eine Datenbankaktion und ist demzufolge definiert im Bug-Model. Im Formular wird nochmal ein hidden-Field für die ID des zu löschenden Datensatzes definiert. Gefüllt wird der Wert der Variablen mit der populate-Methode. Das ist hier eigentlich unnötig, da die ID schon mit der Formular-Aktion übergeben wird, wird aber zu Demo-Zwecken beibehalten.
Die ID müßte AUSSERHALB des Formulars angezeigt im View-Script um einen Text wie "Datensatz mit der ID xy wirklich löschen?" ausgeben zu können. Darum mittels $this->view->id = $id die Id als View-Variable übergeben.
Das View-Script unter views/scripts/bug/delete.phtml sieht so aus:
<h2>Bugreport löschen</h2>
<p>Soll der Bugreport mit der ID <?php echo $this->id; ?> unwiderruflich gelöscht werden?</p>
<p><br/></p>
<?php
echo $this->form->render();
?>