Formular zum Erstellen und Bearbeiten eines Datensatzes
Wie kann man das Hinzufügen und Bearbeiten eines Datensatzes in Nette richtig umsetzen, indem man für beides das gleiche Formular verwendet?
In vielen Fällen sind die Formulare zum Hinzufügen und Bearbeiten eines Datensatzes identisch und unterscheiden sich nur durch die Beschriftung der Schaltfläche. Wir werden Beispiele für einfache Präsentationen zeigen, bei denen wir das Formular zuerst zum Hinzufügen eines Datensatzes und dann zum Bearbeiten verwenden und schließlich beide Lösungen kombinieren.
Hinzufügen eines Datensatzes
Ein Beispiel für einen Präsentator, der zum Hinzufügen eines Datensatzes verwendet wird. Die eigentliche Datenbankarbeit
überlassen wir der Klasse Facade
, deren Code für dieses Beispiel nicht relevant ist.
Bearbeiten eines Datensatzes
Sehen wir uns nun an, wie ein Presenter zum Bearbeiten eines Datensatzes aussehen würde:
In der Action-Methode, die gleich zu Beginn des Presenter-Lebenszyklus aufgerufen wird, überprüfen wir die Existenz des Datensatzes und die Berechtigung des Benutzers, ihn zu bearbeiten.
Wir speichern den Datensatz in der Eigenschaft $record
, so dass er in der Methode
createComponentRecordForm()
zum Festlegen von Standardwerten und recordFormSucceeded()
für die ID zur
Verfügung steht. Eine alternative Lösung wäre, die Standardwerte direkt in actionEdit()
zu setzen und den ID-Wert,
der Teil der URL ist, mit getParameter('id')
abzurufen:
Allerdings, und das sollte die wichtigste Erkenntnis aus dem ganzen Code sein, müssen wir sicherstellen, dass die
Aktion tatsächlich edit
ist, wenn wir das Formular erstellen. Denn sonst würde die Validierung in der Methode
actionEdit()
überhaupt nicht stattfinden!
Dasselbe Formular zum Hinzufügen und Bearbeiten
Und nun werden wir beide Präsentatoren in einem kombinieren. Entweder wir unterscheiden, welche Aktion an der Methode
createComponentRecordForm()
beteiligt ist und konfigurieren das Formular entsprechend, oder wir überlassen es direkt
den Aktionsmethoden und lassen die Bedingung weg: