[Catalyst] Custom error handling

kakimoto at tpg.com.au kakimoto at tpg.com.au
Sun Jul 5 04:32:58 GMT 2009


hello, Tomas,

 thank you :) My replies are as per below.


> You mean you're calling $c->error yourself in your own controller
> code?

Yes I am.
> You haven't shown us the code you're putting stuff into $c->error  
> with, therefore it's pretty hard to tell how you're doing it wrong.


---- Extract from Controller (Start) ----
sub _save_address
{
    };
    if ($@)
    {   
        $c->log->debug('Exception while saving address - '. $@);

        $c->error(
            q{ An error has occured with the address entered. Please
ensure } .
            q{that you have entered a valid address. If this persists, } .
            q{please contact our helpdesk at helpdesk at loadproperty.com.au.}
        );
    }   
            
    return $address->id;
}    

---- Extract from Controller (End) ----

> 
> Try just putting:
> 
> die("An error")
> 
> into your controller code, and you should see that captured in $c- 
>  >error when it gets to your end action
> 
yes, when i did that in my controller code, this is what I saw on the
terminal's logs:

[error] Caught exception in myApp::Controller::Listings->_save_address
"An error  at
/home/kakimoto/projects/myApp/script/../lib/myApp/Controller/Listings.pm
line 590."



 When I remove "-Debug" from myApp.pm, I get just the generic screen
saying "Please come back later" whilst when I have "-Debug" there in
myApp.pm, I get a screen with the following message in the web browser.

"Caught exception in myApp::Controller::Listings->_save_address "An
error at
/home/kakimoto/projects/myApp/script/../lib/myApp/Controller/Listings.pm
line 590."


 My Root->end now looks like this:


sub end : ActionClass('RenderView') {
    my ($self, $c) = @_;

    $c->log->debug(" Calling END in Root "
    #. Data::Dumper->Dump([$c->error])
    );

     if ( scalar @{ $c->error } ) {
        $c->log->debug(' Found an error in Root' );
        $c->stash->{errors}   = $c->error;
        $c->stash->{template} = 'menu.tt';
    }
    else
    {
        $c->log->debug(" nothing done ");
    }
   return 1;
}


 In the terminal logs, I do get the message, "Found an error in Root"
BUT it doesn't load the template i specified (menu.tt2).


Any idea of how to get a custom screen up?





More information about the Catalyst mailing list