200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > tp获取php异常信息 ThinkPHP 异常处理

tp获取php异常信息 ThinkPHP 异常处理

时间:2022-05-11 17:02:21

相关推荐

tp获取php异常信息 ThinkPHP 异常处理

异常处理

系统产生的异常和错误都是程序的隐患,要尽早排除和解决,而不是掩盖。对于应用自己抛出的异常则做出相应的捕获处理

我们在编写代码的时候通常会使用流程语句,当然我们也可以把捕获异常当成流程与就来使用

Tp在调试模式下展示异常页面,显示具体细节,而在部署模式下,仅显示错误信息提示,这么做是为了安全考虑。我们可以手动捕获异常,如果工程量小的情况下可以,但是如果需要捕获异常的地方有很多的话,岂不是要写很多重复的代码,虽然利用公共方法可以解决重复问题,但这不是最优解。系统支持异常处理由开发者自定义类进行接管,需要在应用配置文件app.php中配置参数exception_handle,下面就举例Api接口的异常处理类。

配置异常处理handle类

在应用配置文件app.php

'exception_handle' => 'app\common\exception\handler\ApiExceptionHandler',

定义异常基类

定义app\common\exception\BaseException.php

namespace app\common\exception;

use think\Exception;

class BaseException extends Exception

{

//http 状态码

public $code = 500;

//错误码

public $errCode = 1000;

//错误消息

public $errMsg = '服务器内部错误';

public function __construct($error = [])

{

if( array_key_exists('code',$error) )

$this->code = $error['code'];

if( array_key_exists('errCode',$error) )

$this->errCode = $error['errCode'];

if( array_key_exists('errMsg',$error) )

$this->errMsg = $error['errMsg'];

}

}

定义异常处理Handle类

我们开发Api的时候,经常会验证参数安全,以及手动抛出可视性错误,那么类似这些前端提示性错误可以直接返回前端,并且不需要记录日志。当然如果在开发调试模式的话,可以交给系统处理异常,如果不是开发调试模式,没必要显示具体的错误,比如返回给前端一大串英文错误信息,客户看了一脸懵逼,他也不知道具体错在哪了,交互非常不好,因为客户端根本不关心这些信息。像这种情况,统一返回给客户端提示说服务器内部错误(大部分是我们代码的问题),然后记录日志,由后端人员再去检查代码,处理好完备的逻辑。

定义app\common\exception\handler\ApiExceptionHandler.php

namespace app\common\exception\handler;

use app\common\exception\BaseException;

use Exception;

use think\exception\Handle;

use think\facade\Env;

use think\facade\Log;

class ApiExceptionHandler extends Handle

{

//http 状态码

private $code;

//错误消息

private $errMsg;

//错误码

private $errCode;

public function render(Exception $e)

{

//表示需要显示具体错误消息的异常类,并不需要记录日志

if($e instanceof BaseException){

$this->code = $e->code;

$this->errMsg = $e->errMsg;

$this->errCode = $e->errCode;

}else{

//获取调试信息,如果处于调试状态,则显示具体错误信息,否则统一返回服务器错误消息,并记录日志

$appDebug = Env::get('app_debug',false);

//交给系统处理错误

if( $appDebug ){

return parent::render($e);

}

$this->code = 500;

$this->errCode = 9999;

$this->errMsg = '服务器内部错误';

//记录日志

$this->recordLog($e);

}

$data = [

'msg' => $this->errMsg,

'code' => $this->errCode,

'data' => '',

];

return json()->data($data)->code($this->code);

}

/**

* 记录错误日志

* @param Exception $e

*/

public function recordLog(Exception $e)

{

$message = $e->getMessage();

Log::record($message,'error');

}

}

至此,异常处理已差不多完成,剩下的就是在实际逻辑中抛出异常,就像上面说的类似流程控制似的,抛出异常的时候就相当于终止了程序,返回给前端错误提示。

本作品采用《CC 协议》,转载必须注明作者和本文链接

趁还没掉光,赶紧给每根头发起个名字吧~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。