PHP版本:5.4
yaf版本:2.3.5
注意:以下代码示例为,开启命名空间:yaf.use_namespace=On?
一、开启异常捕获(如果业务代码中没有try catch,但是有throw,则有框架统一捕获)
文件:conf/application.ini
application.dispatcher.catchException = true
二、新建文件ErrorController文件、新建方法 errorAction (默认该方法,统一处理)
文件:app/controllers/Error.php
<?php
/**
* 当有未捕获的异常, 则控制流会流到这里
*/
class ErrorController extends \Yaf\Controller_Abstract
{
/**
* 也可通过$request->getException()获取到发生的异常
*/
public function errorAction($exception)
{
$data = [
'Code' => $exception->getCode(),
'Message' => $exception->getMessage(),
'File' => $exception->getFile(),
'Line' => $exception->getLine(),
'Trace' => $exception->getTrace(),
'getTraceAsString' => $exception->getTraceAsString()
];
//1、钉钉群 机器人预警
echo json_encode($message, JSON_UNESCAPED_UNICODE);
exit;
}
}
三、新增系统错误,框架捕获异常,依赖于 _initErrorHandler
文件:app/Bootstrap.php
public function _initErrorHandler(\Yaf\Dispatcher $dispatcher)
{
//参数一:触发调用那个方法
//参数二:设置错误级别(非必填项)
$dispatcher->setErrorHandler(array(get_class($this),'error_handler'), E_ALL ^E_NOTICE);
}
文件:app/Bootstrap.php 新建方法:error_handler
/**
* Error Handler
* @param $errno // 错误常量 8:notice 2:warning 1:error
* @param $errstr // 错误信息
* @param $errfile // 错误文件路径
* @param $errline // 错误文件行号
* @throws ErrorException
*/
public static function error_handler($errno, $errstr, $errfile, $errline)
{
if (error_reporting() === 0) return;
throw new ErrorException($errstr, 50001, $errno, $errfile, $errline);
}
参考链接:
1、setErrorHandler 参考链接:
Yaf_Dispatcher::setErrorHandler
2、官方文档:10.2. 异常模式?
我为人人,人人为我,美美与共,天下大同。
|