[Catalyst] Custom error

Brian Kirkbride brian.kirkbride at deeperbydesign.com
Tue Jun 26 19:33:35 GMT 2007


Brian Kirkbride wrote:
> Jason Kohles wrote:
>> On Jun 25, 2007, at 1:27 PM, Evaldas Imbrasas wrote:
>>
>>> Yes, that's what I meant, thanks Brian. Please provide a code example
>>> using RenderView action. I think it would also make sense to
>>> incorporate that example into the Catalyst cookbook instead of
>>> existing one since that one's incomplete.
>>
>> Something like this...
>>
>> sub render : ActionClass('RenderView') { }
>>
>> sub end : Private {
>>     my ( $self, $c ) = @_;
>>
>>     $c->forward( 'render' );
>>
>>     if ( my @errors = @{ $c->errors } ) {
>>         $c->response->content_type( 'text/html' );
>>         $c->response->status( 500 );
>>         $c->response->body( qq{
>>             <html>
>>             <head>
>>             <title>Error!</title>
>>             </head>
>>             <body>
>>                 <h1>Oh no! An Error!</h1>
>>         } . ( map { "<p>$_</p>" } @errors ) . qq{
>>             </body>
>>             </html>
>>         } );
>>     }
>> }
>>
> 
> Or even this:
> 
> sub render : ActionClass('RenderView') {}
> sub end : Private {
>   my ($self,$c) = @_;
>   $c->forward('render');
>   if (my @errors = @{$c->errors}) {
>     $c->errors(0);
>     $c->stash->{template} = 'error.tt';
>     $c->stash->{errors} = \@errors;
>     $c->forward($c->view('TT'));
>   }
> }
> 
> To allow for a templated error page.
> 
> Best,
> Brian

Actually, you'd probably want that to be:

$c->forward('render') unless @{$c->errors};

to avoid rendering a template when an error occurred during the action.



More information about the Catalyst mailing list