tp5.1 API 自定义全局异常处理(下)

tp5.1自带的错误页面是非常清晰的,而客户端的开发者需要一个简化的 json 信息,前面的上中两篇已经具体介绍了如何返回 json 信息,但是作为客户端开发我们还是希望使用 tp5.1 自带的错误页面来定位错误,这样如何调和呢?我们可以通过一个开关来进行操作,开关开的时候返回具体的包含错误信息的 html 页面,如果开关是关闭的我们就返回 json。

现在我们来分析一下思路,我们通过自己写的 render 方法覆盖了父类的 render 方法,所以当我们需要重新调用父类 render 方法的时候,我们重新将 else 里面的代码补充一下:



namespace app\lib\exception;
use Exception;
use think\exception\Handle;
use think\facade\Log;


class ExceptionHandler extends Handle
{
    private $code;
    private $msg;
    private $error_code;
    public function render(Exception $e)
    {
        if ($e instanceof BaseException) {
            $this->code = $e->code;
            $this->msg = $e->msg;
            $this->error_code = $e->error_code;
        } else {
            if(config('app_debug')){
                return parent::render($e);
            }
            $this->code = 500;
            $this->msg = '服务器内部异常';
            $this->error_code = 999;
        }
        $request = request();
        $result = [
            'msg' => $this->msg,
            'error_code' => $this->error_code,
            'request_url' => $request->url()
        ];
        Log::record($e->getMessage(),'error');
        return json($result, $this->code);
    }
}

tp5.1 API 自定义全局异常处理(下)_第1张图片
即,当在开发模式下的时候,我们可以通过配置文件中的"app_debug"控制返回 Handle 类的 render 方法的结果,这样我们就可以看到一个页面了,而生产模式的时候,可以关闭该模式,就会返回 json 了。

你可能感兴趣的:(ThinkPHP5.1,PHP,ThinkPHP)