Thread croak und Unterdrückung des caller mit "\n" (11 answers)
Opened by rosti at 2012-01-22 21:41

pq
 2012-01-22 22:25
#155598 #155598
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
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
2
3
4
5
[%if error.message_too_long %]<div class="error">
[%translate id=error_message_too_long %]
</div>
[%elsif error.... %]...
[%/if %]

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: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread croak und Unterdrückung des caller mit "\n"