Catalyst: Web-Framework für Perl
Seite 6: Eingabeverarbeitung
Benutzereingaben weiterverarbeiten
Auf Korrektheit lassen sich die Formulareinträge mit Catalyst::Plugin::FormValidator
prüfen. Aus Platzgründen müssen die Details dazu entfallen; der vollständige Code auf dem iX-Listingserver illustriert das Vorgehen.
Das eigentliche Template zum Editieren von Einträgen besteht aus einem Formular mit Feldern für die Überschrift und den Text des Eintrags. Ihr Inhalt wird an /do_edit
gesendet:
<form method="post" action="[% c.uri_for( 'do_edit', entry.id ) %]">
<p>
Überschrift: [% c.form.msgs.title %]
<input name="title" value="[%- entry.title %]" />
<br /> Text: [% c.form.msgs.body %] <br />
<textarea name="body" cols="60" rows="10">
[%- entry.body %]
Catalyst füllt die Felder eines übergebenen Datenbankobjekts entry
mit den entsprechenden Werten und ergänzt das Ziel für das Formular um die ID des Eintrags. Anweisungen der Form [%c.form.msgs.title %]
kommen bei der Eingabeprüfung zum Zug: An dieser Stelle erscheinen feldbezogene Fehlermeldungen.
Die Action do_edit
( Listing 1) verarbeitet die im Formular eingegebenen Daten, indem sie sie prüft und die Datenbank aktualisiert. Die Validierung geschieht in einer separaten privaten Action, die nur per forward()
- oder detach()
-Methode aufrufbar ist. Sie unterscheiden sich darin, dass das Programm nach dem Abarbeiten der aufgerufenen Action bei forward()
die ursprüngliche fortsetzt, während es bei detach()
zu einer anderen verzweigt.
do_edit
startet per forward()
die Action check_input
für die Eingabeprüfung. Treten dabei Fehler auf, zeigt check_input()
das Formular via $c->detach('edit')
erneut zur Bearbeitung an. In diesem Fall springt das in lib/iXApp.pm
geladene Plug-in FillInForm
ein und stellt sicher, dass die eingegebenen Daten erhalten bleiben.