TP6自定義拋出異常實(shí)例

優(yōu)勢(shì):

1.異常處理通常是防止未知錯(cuò)誤產(chǎn)生所采取的處理措施。異常處理的好處是不用再絞盡腦汁去考慮各種錯(cuò)誤随夸,這為處理某一類(lèi)錯(cuò)誤提供了一個(gè)很有效的方法,使編程效率大大提高。
2.自定義拋出異常的好處绷跑,避免if else嵌套,增強(qiáng)代碼可讀性凡资,返回給前端一個(gè)簡(jiǎn)化的json信息砸捏,進(jìn)行相應(yīng)處理。

TP6實(shí)例
在app目錄下新建lib\exception文件夾
在文件夾下新建ExceptionHandle.php隙赁,BaseException.php

ExceptionHandle.php代碼垦藏,重寫(xiě)render

<?php
namespace app\lib\exception;

use think\Exception;
use think\exception\Handle;
use think\Log;
use think\Response;
use Throwable;

/**
 * 應(yīng)用異常處理類(lèi)
 */
class ExceptionHandle extends Handle
{
    public $httpStatus =500 ;
    private $code;
    private $msg;
    private $errorCode;

    public function render($request, Throwable $e): Response
    {
        if($e instanceof BaseException){
            $this->code = $e->code;
            $this->msg = $e->msg;
            $this->errorCode = $e->errorCode;
        }else{
            if(env('APP_DEBUG', '0')){
                return parent::render($request, $e);
            }else{
                $this->code =500;
                $this->msg='服務(wù)器錯(cuò)誤,請(qǐng)聯(lián)系客服或者稍后再試';
                $this->errorCode=999;
                $this->recordErrorLog($e);
            }
        }
        $result = [
            'error_code' => $this->errorCode,
            'msg'  => $this->msg,
            'request_url' => request()->url()
        ];

        return json($result, $this->code);
    }
    //記錄日志
    public function recordErrorLog(Exception $e){
        Log::record($e->getMessage(),'error');
    }
}

BaseException.php

<?php
namespace app\lib\exception;


use think\Exception;
use Throwable;

class BaseException extends Exception
{
    public $code = 400;
    public $msg = 'invalid parameters';
    public $errorCode = 999;
    public $paramsEnum = [];
    public $shouldToClient = true;

    public function __construct($params=[], $type=0)
    {
        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('errorCode',$params)){
            $this->errorCode = $params['errorCode'];
        }

        if( $type ){
            $params = $this->paramsEnum[ $type ];
            $this->errorCode = $params['error_code'];
            $this->msg = $params['msg'];
        }
    }
}

使用

1、在app目錄下的provider.php文件中綁定異常處理類(lèi)伞访,
坑1:如果按照開(kāi)發(fā)手冊(cè)來(lái)寫(xiě)的話(huà)掂骏,總是不會(huì)走自定義異常,報(bào)錯(cuò)500
解決方法如下代碼

<?php
use app\lib\exception\ExceptionHandle;
use app\Request;

// 容器Provider定義文件
return [
    'think\Request'          => Request::class,
    'think\exception\Handle' => ExceptionHandle::class,
];

2厚掷、在app\lib\exception下新建異常處理類(lèi)弟灼,例:
新建ActivityException.php代碼如下

<?php
namespace app\lib\exception;

class ActivityException extends BaseException{
    public $code = 400;
    public $msg = 'activity is error';
    public $errorCode = 10700; // 10700-10799

    public $paramsEnum = [
        1 => ['error_code'=>10701, 'msg'=>'活動(dòng)添加失敗,請(qǐng)重試~'],
        2 => ['error_code'=>10702, 'msg'=>'活動(dòng)添加失敗冒黑,請(qǐng)重試'],
        3 => ['error_code'=>10703, 'msg'=>'票據(jù)規(guī)格添加田绑,請(qǐng)重試'],
        4 => ['error_code'=>10704, 'msg'=>'活動(dòng)不存在'],
        5 => ['error_code'=>10705, 'msg'=>'不可跨賬號(hào)操作~'],
        6 => ['error_code'=>10706, 'msg'=>'活動(dòng)不存在或已下架~'],
        7 => ['error_code'=>10707, 'msg'=>'票據(jù)不存在~'],
        8 => ['error_code'=>10708, 'msg'=>'該票據(jù)已售罄,請(qǐng)更換其他規(guī)格~'],
        9 => ['error_code'=>10709, 'msg'=>'活動(dòng)名額已滿(mǎn)薛闪,親下次早來(lái)哦~'],
        10 => ['error_code'=>10710, 'msg'=>'下單失敗辛馆,請(qǐng)重試~']
    ];

    public function __construct($params=[],$type=0)
    {
        parent::__construct($params, $type);
    }
}

3、使用時(shí)引入ActivityException豁延,可使用定義好的拋出異常類(lèi)型昙篙,也可以自定義拋出異常信息

throw new ActivityException([],1);

結(jié)果

返回Json信息
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市诱咏,隨后出現(xiàn)的幾起案子苔可,更是在濱河造成了極大的恐慌,老刑警劉巖袋狞,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件焚辅,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡苟鸯,警方通過(guò)查閱死者的電腦和手機(jī)同蜻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)早处,“玉大人湾蔓,你說(shuō)我怎么就攤上這事∑霭穑” “怎么了默责?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵贬循,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我桃序,道長(zhǎng)杖虾,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任媒熊,我火速辦了婚禮奇适,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泛释。我一直安慰自己滤愕,他們只是感情好温算,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布怜校。 她就那樣靜靜地躺著,像睡著了一般注竿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天跟继,我揣著相機(jī)與錄音亭珍,去河邊找鬼。 笑死宣谈,一個(gè)胖子當(dāng)著我的面吹牛愈犹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播闻丑,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼漩怎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了嗦嗡?” 一聲冷哼從身側(cè)響起勋锤,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎侥祭,沒(méi)想到半個(gè)月后叁执,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡矮冬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年谈宛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胎署。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吆录,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出硝拧,到底是詐尸還是另有隱情径筏,我是刑警寧澤葛假,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站滋恬,受9級(jí)特大地震影響聊训,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恢氯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一带斑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧勋拟,春花似錦勋磕、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至啸胧,卻和暖如春赶站,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纺念。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工贝椿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人陷谱。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓烙博,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親烟逊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子渣窜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容