Thread croak und Unterdrückung des caller mit "\n"
(11 answers)
Opened by rosti at 2012-01-22 21:41
Ich würde das bei webapps mit Exception-Objekten lösen.
Mein battie-Framework bietet eine Methode exception, der man eine "Klasse" und einen Text mitgeben kann. Mit der Klasse kann man dann z.b. verschiedene Arten von Fehlern klassifizieren und unterschiedlich darstellen. Code (perl): (dl
)
$framework->exception("Input", "Fehlermeldung..."); Die run-Methode meines Frameworks macht im Prinzip folgendes: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 sub run { # gewünschtes modul und funktion ermitteln # request erstellen eval { # modul/funktion aufrufen }; if ($@) { # abfragen, ob es ein Exception-Objekt vom Framework ist # dementsprechend die Ausgabe generieren # falls kein bekanntes Exception-Objekt, generische Fehlermeldung # anzeigen und Fehler im errorlog ausgeben } } sub exception { my ($self, $class, $text) = @_; croak WWW::Battie::Exception->new({ class => $class, text => $text, }); } desweiteren bietet es auch eine not_found_exception() Methode, der man noch Vorschläge für den User mitgeben kann ("nicht gefunden, vielleicht meintest du ... oder ..."). Auf diese Weise hat man volle Kontrolle, was dem User angezeigt wird. Bei fehlerhaften Eingaben in einem Formular verwende ich i.d.R. gar keine Exceptions, sondern setze im Template-Stash einen error-Key. So wird das Formular einfach nochmal angezeigt, und im Template kann ich entscheiden, ob der error-Key gesetzt ist und entsprechend einen Hinweis über dem Formular anzeigen. etwa Code: (dl
)
1 [%if error.message_too_long %]<div class="error"> An der Stelle kann ich, wie man sieht, auch einfach übersetzte Fehlermeldungen anzeigen. Editiert von pq: sub Exception hinzugefügt Last edited: 2012-01-22 22:40:03 +0100 (CET) Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wie frage ich & perlintro brian's Leitfaden für jedes Perl-Problem |