php zend 多个站错误,Zend Framework 入门——错误处理

使用 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()

{

$log = Zend_Registry::get('error_log');

$content = null;

$errors = $this->_getParam ('error_handler') ;

switch ($errors->type) {

case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER :

case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION :

// 404 error -- controller or action not found

$this->getResponse ()->setRawHeader ( 'HTTP/1.1 404 Not Found' ) ;

// ... get some output to display...

$content = "error_page_not_found"$$

break ;

default :

// application error; display error page, but don't change

// status code

$content = "error_unexpected"$$

// ...

// Log the exception

$exception = $errors->exception;

$log->debug($exception->getMessage() .

PHP_EOL . $exception->getTraceAsString());

break ;

}

// Clear previous content

$this->getResponse()->clearBody();

$this->view->content = $content;

}

在 languages/zh_cn.php 中加入错误信息的中文条目(如果你不需要支持多国语言,那么可以忽略这些):

'error_page_not_found' => "

404 错误:页面不存在!

" . PHP_EOL .

'

对不起,您所要求的页面不存在。

',

'error_unexpected' => '

错误!

' . PHP_EOL .

'

对不起,系统无法响应您的请求。请稍后再试。

',

最后,略微修改一下 application/views/error/error.phtml 文件:

其中的错误显示代码为:

<?php echo $this->translate($this->content); ?>

注意:如果你需要记录所有的异常和错误,包括各种警告,可以参考这里。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值