Zend_Controller_Plugin_ErrorHandler提供了一个活动的插件,用来处理从程序抛出的异常,包括那些从缺控制器或动作的来的结果;它是一个列在MVC Exceptions section里的方法的一个替代。
ErrorHandler 插件设计用来处理HTTP 404 类型的错误(找不到页面)和 500 类型错误(内部错误)。它不打算抓取有其它插件或路由产生的异常。
Zend_Controller_Plugin_ErrorHandler将转发给ErrorController::errorAction()。你可以通过使用在插件中不同的访问器给它们设置替代的值:
setErrorHandlerModule() 设置控制器模块来使用。
setErrorHandlerController() 设置控制器来用。
setErrorHandlerAction() 设置控制器动作来用。
setErrorHandler()接受联合数组,它可以包含任何键,如'module'、 'controller' 或 'action',以及要给它们设置的合适的值。
setErrorHandler()的构造函数。
Zend_Controller_Plugin_ErrorHandler注册一个postDispatch()钩子和检查注册在响应对象里的异常。如果发现有异常,它试图转发给注册的错误处理器(handler)动作。
ErrorHandler插件不仅抓取程序错误,而且也抓取在控制器链里的由于缺失控制器类和/或动作方法而产生的错误,它可以用作一个404处理器。这样做,需要让错误控制器检查异常类型。
Zend_Controller_Action::_getParam('error_handler')来读取它:
$errors->type来获得类型。它将是下面其中之一:
Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER,指示控制器没有被发现。
Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION,指示请求动作没有被发现。
Zend_Controller_Plugin_ErrorHandler::EXCEPTION_OTHER,指示其它异常。
error_handler对象的exception属性来触发的:
render()做多次调用,很可能响应对象已经有存储在它里面的内容。这可以导致呈显期望的内容和错误的内容的混合体。
The page you requested was not found.
EOH; break; default: // application error $content =<<An unexpected error occurred. Please try again later.
EOH; break; } // Clear previous content $this->getResponse()->clearBody(); $this->view->content = $content; } } ]]>