>
使用 Zend Framework 的 MVC 结构,如果不做特殊的处理,所有的异常都会被前端控制器捕获,并累积起来。
Zend Framework 提供了若干种方法来处理异常。这里介绍最简单的一种。
在第一部分《快速上手》中,我们已经有了一个很简单的错误处理机制,即通过 applicatoin/controllers/ErrorController.php 以及其中定义的 errorAction 方法来处理异常。不过,只是给出了一个很简陋的报错信息。现在,我们把它再完善一下,达到两个基本要求:
- 用户请求了不存在的控制器或动作(404 错误),在用户的浏览器中给出报错信息;
- 其他的系统错误,则在日志文件中记录下来。
1. 创建日志
创建一个与 application 平行的文件夹,命名为 logs。
编辑 html/index.php 文件,加入下面的代码:
require_once 'Zend/Log.php'; require_once 'Zend/Log/Writer/Stream.php'; $log = new Zend_Log(new Zend_Log_Writer_Stream($rootPath . '/logs/errors.log', 'a+')); Zend_Registry::set('error_log', $log); |
注意:Web 服务器应具有对 logs 文件夹的读写权限。
2. 完善错误处理代码
编辑 application/controllers/ErrorController.php 文件,新的 errrorAction 方法为:
public function errorAction() |
在 languages/zh_cn.php 中加入错误信息的中文条目(如果你不需要支持多国语言,那么可以忽略这些):
'error_page_not_found' => "<h1>404 错误:页面不存在!</h1>" . PHP_EOL . '<p>对不起,您所要求的页面不存在。</p>', 'error_unexpected' => '<h1>错误!</h1>' . PHP_EOL . '<p>对不起,系统无法响应您的请求。请稍后再试。</p>', |
最后,略微修改一下 application/views/error/error.phtml 文件:
其中的错误显示代码为:
<?php echo $this->translate($this->content); ?> |
注意:如果你需要记录所有的异常和错误,包括各种警告,可以参考这里。
相关文章