Catalyst: Web-Framework für Perl

Seite 6: Eingabeverarbeitung

Inhaltsverzeichnis

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.