企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
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)