[Catalyst] error handling
Ash Berlin
ash_cpan at firemirror.com
Mon Dec 10 15:07:20 GMT 2007
On 10 Dec 2007, at 14:44, Angel Kolev wrote:
> sub auto : Private {
> my ($self, $c) = @_;
> if (@{$c->error}) {
> $c->stash->{error} = " Critical ERROR!! Probably missing data
> in database.";
> $c->forward('/error');
> $c->error(0);
> return 0;
> }
> }
>
> This dont work. @{$c->error} or scalar @{$c->error} always print 0
> in my debug screen.
>
> Felix Antonius Wilhelm Ostmann wrote:
>> $c->error is a arrayref or not?
>>
>> So you must do this:
>>
>> if( @{$c->error} ) {
>> ...
>> }
>>
>> Angel Kolev schrieb:
>>> Hi,all. Can anyone eplain me a bit about error handling. Where i
>>> can catch it and when? I use this:
>>>
>>> MyApp::C::MyController
>>>
>>> sub auto : Private {
>>> my ($self, $c) = @_;
>>> if ($c->error) {
>>> $c->stash->{error} = " Critical ERROR!! ";
>>> $c->forward('/error');
>>> $c->error(0);
>>> return 0;
>>> }
>>>
>>> }
>>>
>>> This works but then all my subs in this controller are redirected
>>> to /error.
>>>
http://search.cpan.org/~mramberg/Catalyst-Runtime-5.7011/lib/Catalyst.pm#$c-%3Efinalize_error
You need to create a sub finalize_error in your MyApp.pm to catch
errors. auto will happen before any errors take place, so of course it
will have nothing in it.
sub finalize_error {
my ($c) = @_; # Note, not ($self, $c)
if ( @{$c->errors} ) {
$c->stash->template('error.tt');
# You might also need to forward to the view here yourself
return;
}
$c->NEXT::finalize_error();
}
Something like that anyway - untested.
More information about the Catalyst
mailing list