[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