控制器異常處理
這是一個簡單的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"]);
}
}
測試效果
完全接管自定義異常