How to catch exceptions in your ZF2 controllers?

15,546

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.

Share:
15,546
Max
Author by

Max

Analytics consultant available for hire. More info: https://maxcorbeau.com

Updated on July 26, 2022

Comments

  • Max
    Max almost 2 years

    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?

  • Max
    Max over 11 years
    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?)
  • Sam
    Sam over 11 years
    See GordonMs comment for that
  • Gordon
    Gordon over 11 years
    @user since all Exceptions extend PHP's global Exception, catch \Exception will catch any exception.