无法捕获Module.php中的异常

时间:2013-11-11 20:44:05

标签: php exception exception-handling zend-framework2 try-catch

我遇到的问题是抛出异常但未在Module.php中捕获。抛出异常的代码包含在try / catch中。没有什么真正花哨的,所以我假设ZF2有一个怪癖和/或理由不允许在这里捕获异常。

代码如下(必要时简化):

class Module
{
    public function onBootstrap(MvcEvent $e)
    {
        // Get service manager, etc.

        // Set up some environment stuff

        try {
            // exception is thrown
        }
        catch (\Exception $e) {
            echo $e->get_message();
            exit;
        }
    }
}

为什么没有捕获异常?

在一个理想的世界里,有一种方法可以在这里捕捉这个例外。但是,如果这不可能,或者过于复杂而不值得付出努力,那么在页面加载过程中尽早获取此数据(无论来源)的替代流程将不胜感激。

我知道Module.php中的代码应该是轻量级的。但是我们在执行任何操作之前立即获取一些数据,因为它将包含对要执行的操作至关重要的数据。第一次访问后会缓存此数据,因此每次其他页面加载都会避免此开销。

我也用谷歌搜索了这个,但显然没有其他人经历过这个,被问过或者记录过它。

1 个答案:

答案 0 :(得分:2)

这个代码在模块类中对我来说很好用:

public function onBootstrap(MvcEvent $e)
{
    try {
        // exception is thrown
        throw new \Exception('My exception here');
    }
    catch (\Exception $e) {
        echo $e->getMessage();
        exit;
    }
}

显示异常消息并退出。 调查发生情况的一种方法是使用xdebug for step by step debugging。 只需在模块中添加一个断点,看看ZF正在做什么。