【发布时间】:2014-07-11 00:42:34
【问题描述】:
最近我一直在 Zend Framework 中进行开发。在异常处理过程中我陷入了困惑。
谁能告诉我处理异常的最佳位置在哪里?是模型还是控制器?它可能是在性能或可用性或其他方面。
【问题讨论】:
标签: php zend-framework exception-handling
最近我一直在 Zend Framework 中进行开发。在异常处理过程中我陷入了困惑。
谁能告诉我处理异常的最佳位置在哪里?是模型还是控制器?它可能是在性能或可用性或其他方面。
【问题讨论】:
标签: php zend-framework exception-handling
如果我们想捕获各种异常,我们最好让我们的模型抛出异常。你也可以阅读这篇文章link
【讨论】:
您应该在控制器中处理异常,因为有时异常的错误消息应该传递给视图。为了避免模型和视图之间的依赖关系,您应该在控制器中处理异常。
Zend Framework all ready 通过内置的 errorController 处理异常。您可以通过在配置文件中添加以下行来启用它。
resources.frontController.throwExceptions = 0
另外,如果你想自己处理异常,而不是在不同的地方处理它们,你可以在一个地方处理它们。如下所示。
告诉 Zend 框架不要处理异常。在您的 application.ini 中执行此操作
resources.frontController.throwExceptions = 1
在您的 Bootstrap 类中执行以下操作。
定义一个自定义方法来处理异常。
public function __handleExceptions(Exception $e){
//render a view with a simple error message for the user
//and send an email with the error to admin
}
在 Bootstrap 类中覆盖 Zend_Application_Bootstrap_Bootstrap 的 _bootstrap() 和 run() 方法,并捕获在引导过程中或运行应用程序时抛出的异常,并调用您的异常处理程序,如下所示。
protected function _bootstrap($resource = null)
{
try {
parent::_bootstrap($resource);
} catch(Exception $e) {
$this->__handleExecptions($e);
}
}
public function run()
{
try {
parent::run();
} catch(Exception $e) {
$this->__handleExecptions($e);
}
}
现在您的所有异常都将在一个地方处理。
【讨论】: