[Catalyst] $c->forward and Exception
Tatsuhiko Miyagawa
miyagawa at gmail.com
Fri Jan 27 23:36:05 CET 2006
I have a Catalyst app which code goes like:
sub foo : Local {
my($self, $c) = @_;
$c->forward('bar');
do_something();
}
sub bar : Private {
my($self, $c) = @_;
throw My::Exception() if cond();
}
I thought do_something() is not executed when bar throws an Excpetion.
But it wasn't true. Because forward() is executed in eval {} and
excpetion is set to $c->error, do_something() *is* executed.
Apparently, I have to write something like:
$c->forward('bar');
die $c->error if $c->error;
everywhere, to make forward() DWIM.
1) The current $c->forward() behaviour doesn't look intuitive. You'd
probably need to document it at least.
2) I'm currently thinking about adding the forward wrapper to do what
I mean, like:
sub forward_nice {
my $c = shift;
$c->forward(@_);
die $c->error if $c->error;
return $c->state;
}
Do you think it's a good idea? If not, lemme know the reason, and
point me to the alternative solution.
--
Tatsuhiko Miyagawa
More information about the Catalyst
mailing list