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"]);

    }
    
}

測試效果
在這裏插入圖片描述
完全接管自定義異常

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