0

我在 Zend Framework 1.12 中发现了一件奇怪的事情。

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

 public function signupAction ()
    {

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

但它并没有转向ErrorController。

我尝试了下面的代码,它可以工作。它转向 ErrorController,并显示应用程序错误。

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

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

4

1 回答 1

2

因为“找不到类”是错误的错误,而不是异常

所以 Zend 在调用 $controller -> dispatch() 时不会捕获它。

请看这个块(Zend_Controller_Dispatcher_Standard):

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

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

请参阅此链接:class_exists

更新:

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

所以你需要(1)自定义错误处理程序和(2)将 Falta Error 更改为 Exception 并且它可以被 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 框架 - PHP 致命错误的错误页面

于 2013-09-22T04:55:41.710 回答