Yaf实现了一套错误和异常捕获机制, 主要是对常见的错误处理和异常捕获方法做了一个简单抽象, 方便应用组织自己的错误统一处理逻辑。
前题是需要配置过或是在程序中启用
1、配置
> application.dispatcher.throwException=1
application.dispatcher.catchException=1
2、在程序中启用
> Yaf_Dispatcher::throwException(true)
在application.dispatcher.catchException(配置文件, 或者可通过Yaf_Dispatcher::catchException(true))开启的情况下, 当Yaf遇到未捕获异常的时候, 就会把运行权限, 交给当前模块的Error Controller的Error Action动作, 而异常或作为请求的一个参数, 传递给Error Action.
#### 新建一个Error Controller
`<?php
class ErrorController extends Yaf_Controller_Abstract
{
public function errorAction($exception)
{
assert($exception);
$this->getView()->assign("code", $exception->getCode());
$this->getView()->assign("message", $exception->getMessage());
$this->getView()->assign("line", $exception->getLine());
}
}
?>`
#### 新建一个Error显示模板文件
`<html>
<head>
<meta charset="utf-8">
<title>Error Page <{$code}></title>
<style>
body{background-color:#f0c040}
h2{color:#fafafa}
</style>
</head>
<body>
<h2>Error Page</h2>
<p>Error Code:<{$code}></p>
<p>Error Message:<{$message}></p>
<p>Error Line:<{$line}></p>
</body>
</html>`
### 在Bootstrap.php中新建一个error_handler方法
`public static function error_handler($errno, $errstr, $errfile, $errline)
{
if (error_reporting() === 0) return;
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}`
### 在Bootstrap.php中初始化ErrorHandler
`public function _initErrorHandler(Yaf_Dispatcher $dispatcher)
{
$dispatcher->setErrorHandler(array(get_class($this),'error_handler'));
}`
这样当有有程序异常时会转到ErrorController
![](https://box.kancloud.cn/2015-11-26_5656c94b7b6d0.png)