如何捕获ZF2控制器中的异常?

Max*_*Max 8 php exception try-catch zend-framework2

我已经设置了ZendSkeletonApplication,ZF 2.0.3我无法捕获控制器中的异常.例如,如果我将以下代码放入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;
    }
Run Code Online (Sandbox Code Playgroud)

并访问我得到的页面:

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
Run Code Online (Sandbox Code Playgroud)

ViewModel中和显示异常踢,有效地阻止我接住.

如何捕获ZF2控制器中的异常?

Gor*_*don 33

你正在抛出PHP的通用异常

throw new \Exception("My exception");
Run Code Online (Sandbox Code Playgroud)

但是你从当前的命名空间中捕获了Exception

} catch (Exception $e) {
Run Code Online (Sandbox Code Playgroud)

假设您的控制器在Application\Controller,您要么必须声明

use \Exception;
Run Code Online (Sandbox Code Playgroud)

在您的类之上,将全局Exception导入当前命名空间或

} catch (\Exception $e) {
Run Code Online (Sandbox Code Playgroud)

捕获PHP的全局异常.

  • @user因为所有Exceptions都扩展了PHP的全局异常,catch\Exception将捕获任何异常. (3认同)