欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

thinkphp5中是怎么自定義全局異常

本篇內(nèi)容主要講解“thinkphp5中是怎么自定義全局異常”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“thinkphp5中是怎么自定義全局異?!卑?

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:做網(wǎng)站、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的城固網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

為了針對書寫 api 時,對各種錯誤返回不通的 json ,直接使用 TP5 自帶的提示錯誤頁面,對于客戶端而言,明顯沒有任何的作用,所以需要自己來自定義全局異常。

1.創(chuàng)建一個全局異常的類(用于傳錯誤信息,狀態(tài)碼等)

use think\Exception;
class BaseException extends Exception {
    /** HTTP 狀態(tài)碼
     * @var string
     */
    public $code;
    
    /** 自定義錯誤碼
     * @var string
     */
    public $errorCode;
    
    /** 錯誤信息
     * @var string
     */
    public $msg;
    
    public function __construct($params=[])
    {
        if (! $params) {
            return ;
        }
        
        // 如果傳了 code
        if ($array_key_exists('code', $code) {
            $this->code = $code;
        }
        
        // 如果傳了 errorCode
        if (array_key_exists('errorCode', $params)) {
            $this->errorCode = $params['errorCode'];
        }
        // 如果傳了 msg
        if (array_key_exists('msg', $params)) {
            $this->msg = $params['msg'];
        }
    }
}

這樣就可以給以傳不通的狀態(tài)碼,錯誤信息和自定義錯誤碼。

2. 創(chuàng)建一個錯誤處理類

錯誤處理類,繼承于TP5自帶的錯誤處理類,重寫該 render 方法,就可以自定義錯誤。

use Exception;
use think\exception\Handle;
use think\Request;
class ExceptionHandle extends Handle 
{
    /** 狀態(tài)碼
     * @var
     */
    private $code;
    /** 自定義錯誤碼
     * @var
     */
    private $errorCode;
    /** 錯誤信息
     * @var
     */
    private $msg;
    
    /** 重寫 Handle 方法里的Render
     * @param Exception $e
     * @return \think\response\Json
     */
            // 注意這里是基類 Exception
    public function render(Exception $e) 
    {
        if ($e instanceof BaseException) {
            //如果是自定義異常,則控制http狀態(tài)碼,不需要記錄日志
            //因為這些通常是因為客戶端傳遞參數(shù)錯誤或者是用戶請求造成的異常
            //不應(yīng)當(dāng)記錄日志
            $this->msg = $e->msg;
            $this->code = $e->code;
            $this->errorCode = $e->errorCode;
        } else {
            // 如果是服務(wù)器未處理的異常,將http狀態(tài)碼設(shè)置為500,并記錄日志
            if (config('app_debug')) {
                // 調(diào)試狀態(tài)下需要顯示TP默認的異常頁面,因為TP的默認頁面
                // 很容易看出問題
                return parent::render($e);
            }
            $this->code = 500;
            $this->msg = '服務(wù)器內(nèi)部錯誤,不想告訴你';
            $this->errorCode = 999;
            $this->recordErrorLog($e);
        }
        $request = Request::instance();
        $result = [
            'msg' => $this->msg,
            'errorCode' => $this->errorCode,
            'request_url' => $request->url()
        ];
        return json($result, $this->code);
    }
    
    /** 錯誤日志處理
     *  這里把config里日志配置的type改為test
     * @param Exception $e
     */
    private function recordErrorLog(Exception $e)
    {
        // 開啟日志
        Log::init([
            'type'  =>  'File',
            'path'  =>  LOG_PATH,
            'level' => ['error']
        ]);
        
        // 日志記錄方法
        Log::record($e->getMessage(),'error');
    }
    
}

3.修改配置config

// 異常處理handle類 留空使用 \think\exception\Handle
    'exception_handle'       => 'app\lib\exception\ExceptionHandle',
    
// 關(guān)閉日志    
'log'                    => [
        // 日志記錄方式,內(nèi)置 file socket 支持擴展
        // 關(guān)閉自動記錄日志,請將type設(shè)置為test
        'type'  => 'test',
        // 日志保存目錄
        'path'  => __DIR__.'/../log/',
        // 日志記錄級別
        'level' => ['sql'],
    ],

4.使用錯誤類的方法

// 這里隨便創(chuàng)建一個userControlelr
class UserController extends Controller {
    use app\api\model\User;
    
    /**
    * 根據(jù) id 獲取某個用戶
    */
    public function getUser($id)
    {
        $user = User::get($id);
        
        // 如果 $user 為空 拋出自定義的錯誤,下面有...
        if(! $user) {
            throw UserMissException();
        }
        
        return json($user);
    }
}

自定義的錯誤子類

// 上面第一節(jié),寫的 Base 錯誤類派上用場了。 
class UserMissException extends BaseException
{
    /** HTTP 狀態(tài)碼
     * @var string
     */
    public $code = '404';
    /** 自定義錯誤碼
     * @var string
     */
    public $errorCode = '40000';
    /** 錯誤信息
     * @var string
     */
    public $msg = '請求的用戶不存在';
}

請求這個 getUser 方法,報錯~  就會顯示

{
    "msg": "請求的用戶不存在",
    "errorCode": "40000",
    "request_url": "/api/v1/user/10"
}

其他的錯誤類型,也就可以繼續(xù)創(chuàng)建異常子類,定義這些錯誤屬性。

到此,相信大家對“thinkphp5中是怎么自定義全局異?!庇辛烁畹牧私?,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

文章題目:thinkphp5中是怎么自定義全局異常
文章路徑:http://aaarwkj.com/article22/iihojc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版云服務(wù)器、域名注冊微信公眾號、商城網(wǎng)站、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
亚洲第一毛片免费在线观看| 开心五月六月婷婷在线| av网址不卡在线免费观看| 一区二区不卡中文av| 中国女人内射69xx| 国产不卡的视频在线观看| 欧美偷拍一区二区三区| 密桃精品一区二区三区在线观看| 中文字幕有码高清在线| 亚洲男人天堂免费观看| 操你啦夜夜操狠狠躁天天爽| 女子张开腿让男人捅爽| 亚洲欧美日韩另类精品一区二区三区| 特黄日韩免费一区二区三区| 免费欧美大片在线观看高清| 精品视频一区二区三区在线观看 | 老熟女露脸吞精一二三四区| 男人天堂av一区二区| 97精品免费在线观看| 亚洲国产成在人网站天堂| 日韩精品一区二区三区欲色av| 日日骚岛国中文字幕av| 成人激情视频在线观看| 久久精品国产精油按摩| 日本师生三片在线观看| 日韩成人中文字幕电影| 2022国产精品一区| 欧美国产日韩在线播放| 中文字幕亚洲精品熟女少妇| 国产精品一区二区三区激情 | 国产女同av一区二区三区 | 一区二区三区欧美小黄片| 亚洲欧美综合日韩综合久久久| 在线视频网友自拍偷拍| 欧美丝袜熟女日韩亚洲| 神马视频一区二区在线观看| 欧美午夜福利在线视频| 最近免费欧美一级黄片| 91久久国产香蕉熟女| 亚欧成人永久免费视频| 日本一区二区三区久久久|