我在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');
}
怎么了?需要我配置其他东西吗?
答案 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);
}
}