Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]441[/thread]

error handling



<< >> 9 Einträge, 1 Seite
esskar
 2005-02-21 23:42
#4459 #4459
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Hi.

wie präsentiert ihr denn Fehler im browser? also wie bindet ihr die fehlermeldungen in eure seiten ein?
mein ansatz war bis jetzt ein Modul das grob so aussieht

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use strict;

BEGIN {
  package Error;

  my @ErrorDefinitions = qw/
     LOGINFAILED
  /;
  for my $i (0 .. $#ErrorDefinitions) {
     eval "use constant $ErrorDefinitions[$i] => '$ErrorDefinitions[$i]';";
  }

  1;
}

package Error;

my %RaisedErrors = ();

sub raise {
 my ($errid, $errmsg) = @_;

 exists $RaisedErrors->{$errid} || $RaisedErrors->{$errid} = [];
 push @{$RaisedErrors->{$errid}}, {MSG => $errmsg} if $errmsg;
}

sub to_html_template {
  my ($tpl) = @_;

  while(my($key, $val) = each %RaisedErrors) {
     $tpl->param("ERROR_$key" => 1);
     $tpl->param("ERROR_$key_msg" => $val;
  }
}

1;


im script kann man dann so schreiben

Code: (dl )
1
2
3
4
5
6
7
8
9
10
use Error;

my $tpl = ...; # HTML::Template

if($login_failed) {
  Error::raise(Error::LOGINFAILED, "Falsches Passwort");
}

Error::to_html_template($tpl);
print $tpl->output;


und das template sieht so aus


Code: (dl )
1
2
3
4
5
6
7
8
9
10
<html>
<body>
<TMPL_IF NAME=ERROR_LOGINFAILED>
Login ist fehlgeschlagen<br />
<TMPL_LOOP NAME=ERROR_LOGINFAILED_MSG>
<TMPL_VAR NAME=MSG><br />
</TMPL_LOOP>
</TMPL_IF>
</body>
</html>


ist aber vielleicht etwas umständlich;

dankbar für tipps!\n\n

<!--EDIT|esskar|1109022244-->
Gast Gast
 2005-02-21 23:57
#4460 #4460
Das kommt bei mir immer darauf an, was ich vorhab'.
esskar
 2005-02-22 00:01
#4461 #4461
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=phaylon,21.02.2005, 22:57]Das kommt bei mir immer darauf an, was ich vorhab'.[/quote]
sehr großes projekt mit vielen verschiedenen erzeugten seiten und ebenso vielen fehlern!
format_c
 2005-02-22 00:26
#4462 #4462
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Ich mach das so:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/perl
use strict;
use warnings;
use lib qw(../modules);
use CGI::Carp qw/fatalsToBrowser warningsToBrowser set_message/;
use CGI;
use HTML::Template;
use MyCMS;

my $maintemplate = '../tmpl/main.html';

sub handle_error {
my $msg = shift;
my $tmpl = HTML::Template->new(filename => $maintemplate);
$tmpl->param(TITLE => 'Serverfehler');
$tmpl->param(INHALT => "<h2>Serverfehler</h2>

<p>Bitte Kontaktieren sie webmaster\@creedforever.com mit folgender Fehlermeldung:</p>
<tt>$msg</tt>");
print $tmpl->output();
}
set_message(\&handle_error);

...


Gruß Alex
esskar
 2005-02-22 00:42
#4463 #4463
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
dann ist aber fatalsToBrowser warningsToBrowser doppelt gemoppelt oder?

außerdem sind das nur fatale fehler; aber was ist user-fehl-eingaben oder so!\n\n

<!--EDIT|esskar|1109025863-->
format_c
 2005-02-22 01:14
#4464 #4464
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Ok hab das auch grad nur so hingewurschtelt
bei Userfalscheingaben kehre ich halt frühzeitig aus der Bearbeitungsroutine zurück und übergebe die Statusmeldung dem Template.

Gruß Alex
esskar
 2005-02-22 01:24
#4465 #4465
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=format_c,22.02.2005, 00:14]Ok hab das auch grad nur so hingewurschtelt[/quote]
schon klar; wollts nur verstehen; set_message hatte ich zuvor nocht nicht gesehen!
sri
 2005-02-22 02:41
#4466 #4466
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich benutze (welch ueberraschung) Catalyst, da gehen Fehler einfach innen stash.
Code: (dl )
$c->stash->{error} = 'Da is was schiefgelaufen';

und dann dierekt ins Template
Code: (dl )
1
2
3
[% IF error %]
Fehler: [% error %]
[% END %]

Dazu kommt dann noch Data::FormValidator.
esskar
 2005-02-22 02:47
#4467 #4467
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=sri,22.02.2005, 01:41]Dazu kommt dann noch Data::FormValidator.[/quote]
tolles ding!
danke!
<< >> 9 Einträge, 1 Seite



View all threads created 2005-02-21 23:42.