8

I've setup the ZendSkeletonApplication with ZF 2.0.3 and I am unable to catch exceptions in my controllers. For instance if I put the below piece of code in module/Application/src/Application/Controller/IndexController.php:

public function indexAction() { echo "BEFORE\n"; try { throw new \Exception("My exception"); } catch (Exception $e) { echo "Caught exception $e\n"; exit; } 

and access the page I get:

BEFORE An error occurred An error occurred during execution; please try again later. Additional information: Exception File: module/Application/src/Application/Controller/IndexController.php:25 Message: My exception 

the ViewModel kicks in and displays the exception, effectively preventing me from catching it.

How can I catch exceptions in ZF2 controllers?

2
  • 4
    is the controller in the global namespace? otherwise, you must either use \Exception or catch \Exception Commented Oct 28, 2012 at 11:49
  • Just a comment on the exception handling style you're using. I'd be disinclined to catch Exception as that's too generic. What you're basically saying with that is "I intend to handle every possible exception that may occur here". If your code calls other methods that may throw exceptions and that code may in turn also call exception-throwing code it can become very difficult to trace the source of the original error. I'd suggest using a catch block for every kind of exception you're expecting and let everything else go uncaught. Commented Oct 28, 2012 at 11:52

1 Answer 1

34

You are throwing PHP's generic Exception

throw new \Exception("My exception"); 

but you catch the Exception from the current namespace

} catch (Exception $e) { 

Assuming your controller is in Application\Controller, you either have to declare

use \Exception; 

above your class to import the global Exception into the current namespace or

} catch (\Exception $e) { 

to catch PHP's global Exception.

Sign up to request clarification or add additional context in comments.

3 Comments

Side questions: will doing catch (\Exception $e) { catch every exception that may occur, or just those that extend the Exception class (e.g. would it catch class ORMException extends Exception?) If not, is there a way of catching any exception (and is it worth trying to do so, since I assume libraries that are probably coded should extend Exception for their custom exception handling, or am I mistaken?)
See GordonMs comment for that
@user since all Exceptions extend PHP's global Exception, catch \Exception will catch any exception.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.