[Catalyst] $c->forward and Exception

Yann Kerherve yann at cyberion.net
Thu Feb 23 00:42:59 CET 2006


On 27 janv. 06, at 14:36, Tatsuhiko Miyagawa wrote:

Hi,

Just to revive this old thread...

> 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.

I've implemented a Plugin to DWMSM (Do What Miyagawa-san Means) based  
on discussions at Six Apart, It's temporarily hosted here :

   http://cyberion.net/mortalforward/

and I'd love to have your feedback. Pod is here :

   http://cyberion.net/mortalforward/Catalyst-Plugin- 
MortalForward-0.01/lib/Catalyst/Plugin/MortalForward.pm

Yann



More information about the Catalyst mailing list