在開發(fā)api的時候是否可以用throw new 拋出http 異常;
這樣的話感覺就很簡單了,比如用戶沒有登錄就直接拋出異常,之后的代碼就不會執(zhí)行;
自定義了一個http異常來接管框架的異常處理! 框架是tp5
還是說用傳統(tǒng)的返回數(shù)組再上一層調(diào)用的時候判斷更好些?
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/1/14/014
* Time: 2:56
*/
namespace app\tool\exception;
use app\tool\Tool;
use Exception;
use think\exception\Handle;
use think\Request;
use think\Log;
class ExceptionHandler extends Handle
{
private $status; //HTTP狀態(tài)嗎
private $msg; //錯誤具體信息
private $data; //錯誤碼
private $code;
public function render(Exception $e)
{
//如果是自定義異常處理類
if ($e instanceof Base) {
$this->status = $e->status; //給狀態(tài)嗎賦值
$this->msg = $e->msg; //給錯誤信息賦值
$this->data = $e->data; //給錯誤碼復(fù)制
$this->code = $e->code; //給錯誤碼復(fù)制
} else {
if (\think\facade\Config::get('app_debug')) {
//如果在測試環(huán)境下直接拋出異常
return parent::render($e);
} else {
//如果是在生產(chǎn)環(huán)境下將直接拋出服務(wù)器錯誤的異常
$this->status = 500;
$this->msg = "服務(wù)器內(nèi)部錯誤";
$this->data = '';
}
//如果是服務(wù)器錯誤 那么就將錯誤記錄到日志里面
$this->recordErrorLog($e);
}
//返回JSON結(jié)構(gòu)的數(shù)據(jù)
$response['status'] = $this->status;
$response['msg'] = $this->msg;
$response['data'] = $this->data;
return json($response, $this->code);
}
//寫日志
private function recordErrorLog(Exception $e)
{
Log::init([
'type' => 'File',
// 日志保存目錄
'path' => LOG_PATH,
// 日志記錄級別
'level' => ['error'],
]);
Log::record($e->getMessage(), 'error');
}
}
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/1/14/014
* Time: 2:47
*/
namespace app\tool\exception;
use think\Exception;
class Base extends Exception
{
public $status = 0; //HTTP狀態(tài)嗎
public $msg = '參數(shù)錯誤'; //錯誤具體信息
public $data = []; //錯誤碼
public $code = 200;
/**
* @desc 構(gòu)造函數(shù) 初始化成員變量
* BaseException constructor.
* @param array $params
* @throws Exception
*/
public function __construct($params = [])
{
//如果傳入的參數(shù)不是數(shù)組就直接拋出異常
if(!is_array($params)){
throw new Exception('參數(shù)必須是數(shù)組');
}
//判斷數(shù)組中是否存在下標(biāo)是code的值
//如果存在就給成員變量賦值
if(array_key_exists('status',$params)){
$this->status = $params['status'];
}
//判斷數(shù)組中是否存在下標(biāo)是 msg 的值
//如果存在就給成員變量賦值
if(array_key_exists('msg',$params)){
$this->msg = $params['msg'];
}
//判斷數(shù)組中是否存在下標(biāo)是 error_code 的值
//如果存在就給成員變量賦值
if(array_key_exists('data',$params)){
$this->data = $params['data'];
}
if(array_key_exists('code',$params)){
$this->code = $params['code'];
}
}
}
namespace app\tool\exception;
class Http extends Base
{
public $status = 0;
public $data = [];
public $msg = "沒有數(shù)據(jù)!";
public $code = 200;
}
public static function getUid()
{
$token = Request::header('token');
if (null === $token) {
throw new Http(['status' => '-2', 'msg' => '請登錄后再操作!']);
}
$result = Cache::get($token);
if (false === $result) {
throw new Http(['status' => '-1', 'msg' => '登陸失效,請重新登錄!']);
}
return $result['id'];
}
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。