ThinkPHP6项目基操(10.不可预知的內部异常处理)
不可預知的內部異常處理
- 一、不可預知異常
- 二、解決方案:
- 1. 修改app目錄下的ExceptionHandle.php
- 2. 不同應用模塊配置不同的錯誤信息格式
- 3. throw異常處理
一、不可預知異常
如果方法里使用未定義的字段:
public function aa(){echo $aa; }訪問頁面就會出錯:
二、解決方案:
1. 修改app目錄下的ExceptionHandle.php
修改app目錄下的 ExceptionHandle.php的render方法,添加自定義的異常處理:
public function render($request, Throwable $e): Response {// 添加自定義異常處理機制return show(config("status.error"), $e->getMessage());// 其他錯誤交給系統處理// return parent::render($request, $e); }再訪問就返回了我們定義的異常結果了:
但是直接修改app目錄下的配置文件不太好,因為app目錄下的都是common文件,會作用于所有的應用,如果我們像上面配置為json格式輸出錯誤,那么如果是模板輸出出錯也會返回json格式,所以不合理。
2. 不同應用模塊配置不同的錯誤信息格式
下面以API模塊舉例:
(1) 還原app目錄下的ExceptionHandle.php文件;
(2) 在demo應用下新建exception文件夾(與controller同級),新建Http.php類,仿造ExceptionHandle繼承Handle類,重寫render方法:
Http.php:
<?phpnamespace app\demo\exception;use think\exception\Handle; use think\Response; use Throwable;class Http extends Handle {public $httpStatus = 500;/*** Render an exception into an HTTP response.** @access public* @param \think\Request $request* @param Throwable $e* @return Response*/public function render($request, Throwable $e): Response{// 添加自定義異常處理機制return show(config("status.error"), $e->getMessage(), [],$this->httpStatus);} }(3) 然后,復制app目錄下的provider.php到demo應用目錄,修改think\exception\Handle配置:
provider.php :
<?php// 容器Provider定義文件 return ['think\exception\Handle' => 'app\\demo\\exception\\Http', ];以上就是配置api模塊的錯誤信息;如果是后臺模板引擎返回報錯,可以定義一個自定義錯誤頁面,而不是返回一個json數據。
3. throw異常處理
在控制器加一個方法throw一個think\exception\HttpException異常:
public function aa(){throw new HttpException(404,"找不到相應的數據"); }訪問結果:
看起來沒問題,細心的朋友會發現狀態碼不太對,我上面拋出的異常設置的狀態碼是404,這里的請求是500,這是為啥呢?
原因是上面自定義異常處理類里面重寫的render方法里面是自定義的狀態碼$httpStatus=500:
我們把這里返回的狀態碼換為$e->getStatusCode():
return show(config("status.error"), $e->getMessage(), [],$e->getStatusCode());再訪問,狀態碼已OK:
但是這里的$e->getStatusCode()只是在throw異常的時候才有這個方法,比如第一步的輸出未知變量的錯誤就沒有這個方法,頁面就會報錯,所以這里需要修改異常處理類:
修改異常處理類Http.php,這樣兩種錯誤異常都可以正常訪問了:
??重磅推薦:免費商用電商系統
😏想白嫖整個電商系統用來商用?
🤑想有自己的商城實現財富自由?
🤓想學習最佳實踐提升自己技術?
快來進入🚀 傳送門 🚀,開源免費、完整示例帶你快速入門,輕松二開,走上人生巔峰!👨?🎓
總結
以上是生活随笔為你收集整理的ThinkPHP6项目基操(10.不可预知的內部异常处理)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器 centos 系统漏洞快速修复简
- 下一篇: 学生汽车网页设计作品静态HTML网页模板