創建自定義異常類基類 app/lib/exception/BaseException.php
<?php namespace app\lib\exception; use Exception; use Throwable; class BaseException extends Exception { public $code = 400; public $msg = '發生錯誤'; public $statusCode = 500; public function __construct($params = []) { if (!is_array($params)) return; if (array_key_exists('code', $params)) $this->code = $params['code']; if (array_key_exists('msg', $params)) $this->msg = $params['msg']; if (array_key_exists('statusCode', $params)) $this->statusCode = $params['statusCode']; } }
創建自定義異常類 app/lib/exception/ExceptionHandler.php
<?php namespace app\lib\exception; use Throwable; use think\exception\Handle; use think\Response; class ExceptionHandler extends Handle { public $code; public $msg; public $statusCode;//http狀態碼 public function render($request, Throwable $e): Response { if ($e instanceof BaseException) { $this->code = $e->code; $this->msg = $e->msg; $this->statusCode = $e->statusCode; } else { // debug開啟 顯示默認的異常 if (env('APP_DEBUG')) return parent::render($request, $e); $this->code = 500; $this->msg = '服務器異常'; $this->statusCode = 500; } $res = [ 'msg' => $this->msg, 'code' => $this->code, ]; return json($res, $this->statusCode); } }
修改thinkphp6異常類使用自定義的異常類 app/provider.php
<?php use app\lib\exception\ExceptionHandler; use app\Request; use app\ExceptionHandle; // 容器Provider定義文件 return [ 'think\Request' => Request::class, 'think\exception\Handle' => ExceptionHandler::class, // 'think\exception\Handle' => ExceptionHandle::class, ];
在控制器中使用拋出自定義異常類 app/index/controller/Index.php
<?php namespace app\index\controller; use app\BaseController; use think\facade\Request; use app\lib\exception\BaseException; class Index extends BaseController { public function index() { throw (new BaseException(['code'=>400,'statusCode'=>404,'msg'=>'異常'])); return '111'; } }