如何在webman中自定义全局处理错误

wekyun

webman中不能使用die()和exit()等函数方法,用了会影响服务。
在框架中想要在任何地方都停止程序向后面继续执行,并响应错误到客户端怎么办呢?

我们可以自定义异常处理类,默认的异常处理在composer的代码文件中,我们不能修改,但是我们可以通过修改配置文件,使用自己的异常错误处理类。

├── app 应用目录
├── config 配置目录
│ ├── exception.php 异常处理配置文件
├── public 静态资源目录

在框架配置文件中,有一个配置文件 exception.php
我们需要修改他的配置,指派成自己的异常处理类即可。

<?php
return [
//    '' => support\exception\Handler::class,//官方原来的,我们注释
    '' => \app\common\exception\Handler::class,//我们自己的
];

配置文件修改完完了,我们需要再去创建自己的异常处理类,就是\app\common\exception\Handler

├── app 应用目录
├── ├──common 公共目录
│ ├────── exception 异常处理目录
│ ├────────── Handler.php 自定义异常处理类

然后定义自己的异常处理代码,我们可以复制框架原来的代码,根据自己的需求改造,

下面演示代码为插件(wekyun/webman_lib)的参数验证错误处理:
在代码中增加了如下代码,如果错误是CheckException类型的错误,就去直接响应客户端json数据,错误码和错误提示都可以获取,错误码可以修改该插件的配置,也可以在此处写死(根据自己的业务来),插件默认参数错误的code=203。

//Check插件抛出的验证错误
        if ($exception instanceof CheckException) {
            return json(['code' => $exception->getCode(), 'msg' => $exception->getMessage(), 'desc' => '参数验证错误提示']);
        }

完整的代码如下,如果是wekyun/webman_lib插件,可以按照此教程,直接复制下面的完整代码!

<?php

namespace app\common\exception;

use support\exception\BusinessException;
use Throwable;
use Webman\Exception\ExceptionHandler;
use Webman\Http\Request;
use Webman\Http\Response;
use Wekyun\WebmanLib\common\exception\CheckException;

/**
 * Class Handler
 * @package support\exception
 */
class Handler extends ExceptionHandler
{
    public $dontReport = [
        BusinessException::class,
    ];

    public function report(Throwable $exception)
    {
        parent::report($exception);
    }

    public function render(Request $request, Throwable $exception): Response
    {
        if (($exception instanceof BusinessException) && ($response = $exception->render($request))) {
            return $response;
        }

        //自定义:Check插件抛出的验证错误
        if ($exception instanceof CheckException) {
            return json(['code' => $exception->getCode(), 'msg' => $exception->getMessage(), 'desc' => '参数验证错误提示']);
        }

        return parent::render($request, $exception);
    }

}

使用wekyun/webman_lib插件的验证功能之时,如果验证报错提示字段不合法,就会走这里的错误处理,注意配置文件一定要改,否则不生效!

刚测试插件,如果是插件,请修改插件的exception.php,否则不生效。

1257 1 0
1个评论

Tinywan

wekyun

570
积分
0
获赞数
0
粉丝数
2023-06-09 加入
×
🔝