easyswoole框架之异常处理

控制器异常处理

这是一个简单的easyswoole的简单控制器处理类

<?php
namespace App\HttpController\Learn;
use EasySwoole\Http\AbstractInterface\Controller;
class  Zq extends  Controller
{
    public function  index()
    {
           throw new \HttpException("controller exception");
    }
    //重写父类的exception处理方法
    public function  onException(\Throwable $throwable): void
    {
        var_dump("exception controller");

    }


}

如果我们访问index方法,看看easyswoole会返回什么给我们呢?一起来看一哈
在这里插入图片描述
确实调用了异常处理方法

注册全局注册处理异常方法

在APP目录下,我们建立一个exception目录
在这里插入图片描述

<?php
namespace App\Exception;

use EasySwoole\Http\Request;
use EasySwoole\Http\Response;

class ExceptionHandler
{
    public static function handle( \Throwable $exception, Request $request, Response $response )
    {
        var_dump($exception->getTraceAsString());
    }
}

然后我们在EasySwooleEvent.php中的init方法中注册这个异常处理类
在这里插入图片描述

  Di::getInstance()->set(SysConst::HTTP_EXCEPTION_HANDLER,[ExceptionHandler::class,'handle']);

在这里插入图片描述
我们自己定义一个ApiException异常处理类

<?php
namespace  App\Exception;

use Throwable;

class  ApiException extends \RuntimeException{


    public function __construct(array $apiErr, Throwable $previous = null)
    {
        $code=$apiErr[0];
        $message=$apiErr[1];
        parent::__construct($message, $code, $previous);
    }

}

然后我们在全局异常处理类接管方法编写异常处理方法

<?php
namespace App\Exception;

use EasySwoole\Http\Request;
use EasySwoole\Http\Response;

class ExceptionHandler
{
    public static function handle( \Throwable $exception, Request $request, Response $response ){

        $data=[];
        if($exception instanceof  ApiException){
            $code=$exception->getCode();
            $msg=$exception->getMessage();

        }else{
            $code=$exception->getCode();
          if(!isset($code)||$code<0){
                $code=-1;
            }

            $msg=empty($exception->getMessage())?"unknow":$exception->getMessage();
        }
        $data['code']=$code;
        $data['msg']=$msg;
        $result=json_encode($data,JSON_UNESCAPED_UNICODE);
        return $response->withHeader("Content-Type","application/json;charset=UTF-8")
                        ->withHeader("Access-Control-Allow-Origin","*")
                         ->write($result);
    }
}

我们注释掉之前Zq控制器的onexception方法测试哈效果

<?php
namespace App\HttpController\Learn;
use App\Exception\ApiException;
use EasySwoole\Http\AbstractInterface\Controller;
class  Zq extends  Controller
{
    public function  index()
    {
           throw new ApiException([1,"Controller Exception"]);

    }
    
}

测试效果
在这里插入图片描述
完全接管自定义异常

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章