Zend框架控制器中的异常

时间:2013-09-22 02:12:08

标签: php zend-framework exception

我在Zend Framework 1.12中发现了一个奇怪的东西。

在动作功能中,我新建了一个不存在的对象。代码如下:

 public function signupAction ()
    {

        $tbuser = new mmmm();//mmmm does not exist, so there's exception here
    }

但它没有转向ErrorController。

我试过下面的代码,它有效。它转向了ErrorController,并显示了Application Error。

public function signupAction ()
{
    throw new Exception('pppp');
}

怎么了?需要我配置其他东西吗?

1 个答案:

答案 0 :(得分:2)

因为“找不到类”是falta错误,而不是Exception

因此当调用$ controller时,Zend不会捕获它 - >调度()。

请看这个块(Zend_Controller_Dispatcher_Standard):

try {
    $controller->dispatch($action);
} catch (Exception $e) {
    //...
}

为避免此错误,您可以在调用之前使用函数class_exists检查类是否已定义。

请参阅此链接:class_exists

更新

默认情况下,falta错误将导致当前的php脚本关闭。

所以你需要(1)自定义错误处理程序和(2)将Falta Error更改为 异常,它可以被ErrorController

捕获

像这样(在index.php中):

register_shutdown_function('__fatalHandler');

function __fatalHandler() {
    $error = error_get_last();
    if ( $error !== NULL && $error['type'] === E_ERROR ) {
        $frontController = Zend_Controller_Front::getInstance();
        $request = $frontController->getRequest();
        $response = $frontController->getResponse();
        $response->setException(new Exception('Falta error:' . $error['message'],$error['type']));

        ob_clean();// clean response buffer
        // dispatch
        $frontController->dispatch($request, $response);
    }
}

参考:Zend framework - error page for PHP fatal errors