2013-09-22 58 views
0

我在Zend Framework 1.12中发现了一个奇怪的东西。Zend Framework控制器中的异常

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

public function signupAction() 
    { 

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

但它不转向ErrorController。

我试过下面的代码,它的工作原理。它转向ErrorController,并显示应用程序错误。

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

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

回答

2

因为“找不到类”是法尔他的错误,也不例外

所以Zend的不抓住它,当调用$控制器 - >调度()。

见该块请(Zend_Controller_Dispatcher_Standard来):

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

为了避免这种错误,你可以使用函数class_exists检查类已被定义或之前不叫。

请参阅此链接:class_exists

更新:

默认情况下,法尔他错误将导致当前的PHP脚本被关闭。

所以你需要(1)自定义错误处理程序和(2)改变尔他向错误异常 并且可以通过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

+0

我想,无论发生什么错误,我都可以得到错误信息并回显它,我该怎么办? –

+0

请查看我的更新。 – ThoQ

相关问题