成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > Laravel如何實(shí)現(xiàn)適合Api的異常處理響應(yīng)格式

Laravel如何實(shí)現(xiàn)適合Api的異常處理響應(yīng)格式

熱門標(biāo)簽:臨沂crm外呼系統(tǒng)平臺 如何在世界地圖標(biāo)注 梧州市機(jī)器人外呼系統(tǒng)怎么樣 廈門400電話辦理選易號網(wǎng) 地圖標(biāo)注符號樣式有 天客通地圖標(biāo)注 電子地圖標(biāo)注怎么修改 菏澤語音外呼系統(tǒng)運(yùn)營商 公司外呼系統(tǒng)中心

前言

Laravel全局捕獲異常后,會把異常轉(zhuǎn)為相應(yīng)的數(shù)據(jù)格式返回給用戶。如果想要規(guī)定的數(shù)據(jù)格式相應(yīng),那我們只需重寫異常捕獲后的處理方法即可。

異常處理流程

Illuminate\Foundation\Exception\Handler 中的 render 方法用來將異常轉(zhuǎn)化為響應(yīng)。

public function render($request, Exception $e)
{
 if (method_exists($e, 'render')  $response = $e->render($request)) {
 return Router::toResponse($request, $response);
 } elseif ($e instanceof Responsable) {
 return $e->toResponse($request);
 }

 $e = $this->prepareException($e);

 if ($e instanceof HttpResponseException) {
 return $e->getResponse();
 } elseif ($e instanceof AuthenticationException) {
 return $this->unauthenticated($request, $e);
 } elseif ($e instanceof ValidationException) {
 return $this->convertValidationExceptionToResponse($e, $request);
 }

 return $request->expectsJson()
   ? $this->prepareJsonResponse($request, $e)
   : $this->prepareResponse($request, $e);
}

render() 中又調(diào)用了 prepareException() 對部分異常進(jìn)行預(yù)處理,但并未執(zhí)行轉(zhuǎn)化為響應(yīng)的操作。

ModelNotFoundException 一般在模型查找不到拋出,prepareException() 中它被轉(zhuǎn)為 Symfony 包中NotFoundHttpException,默認(rèn)狀態(tài)碼404;

AuthorizationException 在 Policy 權(quán)限未通過時拋出,prepareException() 中它被轉(zhuǎn)為 Symfony 包中 AccessDeniedHttpException,默認(rèn)狀態(tài)碼403;

TokenMismatchException 在 CSRF 驗(yàn)證未通過時拋出,prepareException() 中它被轉(zhuǎn)為 Symfony 包中 HttpException,給定狀態(tài)碼419;

其他異常直接返回。

protected function prepareException(Exception $e)
{
 if ($e instanceof ModelNotFoundException) {
 $e = new NotFoundHttpException($e->getMessage(), $e);
 } elseif ($e instanceof AuthorizationException) {
 $e = new AccessDeniedHttpException($e->getMessage(), $e);
 } elseif ($e instanceof TokenMismatchException) {
 $e = new HttpException(419, $e->getMessage(), $e);
 }

 return $e;
}

在回到 render() ,預(yù)處理異常之后,又分別對 HttpResponseException、AuthenticationException 和 ValidationException 單獨(dú)處理,并轉(zhuǎn)為響應(yīng)返回。

除此以外的異常,都在 prepareJsonResponse() 或 prepareResponse() 處理 ,expectsJson() 用來判斷返回 json 響應(yīng)還是普通響應(yīng)。

修改異常響應(yīng)格式

了解了異常處理流程,接下來就處理異常響應(yīng)格式。

修改登錄認(rèn)證異常格式

由上文可知,AuthenticationException 被捕獲后,調(diào)用 unauthenticated() 來處理。

protected function unauthenticated($request, AuthenticationException $exception)
{
 return $request->expectsJson()
    ? response()->json(['message' => $exception->getMessage()], 401)
    : redirect()->guest($exception->redirectTo() ?? route('login'));
}

在 appExceptionsHandler.php 中重寫 unauthenticated() 使其返回我們想要的數(shù)據(jù)格式。

protected function unauthenticated($request, AuthenticationException $exception)
{
 return $request->expectsJson()
  ? response()->json([
   'code' => 0,
   'data' => $exception->getMessage(),
  ], 401)
  : redirect()->guest($exception->redirectTo() ?? route('login'));
}

修改驗(yàn)證異常格式

同樣由上文可知,ValidationException 被捕獲后交由 convertValidationExceptionToResponse() 處理,進(jìn)入此方法后我們需要繼續(xù)追蹤,若是需要 json 響應(yīng),最終交由 invalidJson() 處理。

protected function convertValidationExceptionToResponse(ValidationException $e, $request)
{
 if ($e->response) {
  return $e->response;
 }

 return $request->expectsJson()
    ? $this->invalidJson($request, $e)
    : $this->invalid($request, $e);
}
protected function invalidJson($request, ValidationException $exception)
{
 return response()->json([
  'message' => $exception->getMessage(),
  'errors' => $exception->errors(),
 ], $exception->status);
}

我們繼續(xù)在 appExceptionsHandler.php 重寫 invalidJson() 即可自定義返回格式。

protected function invalidJson($request, ValidationException $exception)
{
 return response()->json([
  'code' => 0,
  'data' => $exception->errors(),
 ], $exception->status);
}

修改其他異常格式

其他異常是調(diào)用 prepareJsonResponse() 來處理,此方法又調(diào)用 convertExceptionToArray() 來處理響應(yīng)格式。

protected function prepareJsonResponse($request, Exception $e)
{
 return new JsonResponse(
  $this->convertExceptionToArray($e),
  $this->isHttpException($e) ? $e->getStatusCode() : 500,
  $this->isHttpException($e) ? $e->getHeaders() : [],
  JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES
 );
}
protected function convertExceptionToArray(Exception $e)
{
 return config('app.debug') ? [
  'message' => $e->getMessage(),
  'exception' => get_class($e),
  'file' => $e->getFile(),
  'line' => $e->getLine(),
  'trace' => collect($e->getTrace())->map(function ($trace) {
   return Arr::except($trace, ['args']);
  })->all(),
 ] : [
  'message' => $this->isHttpException($e) ? $e->getMessage() : 'Server Error',
 ];
}

在 appExceptionsHandler.php 中重寫 convertExceptionToArray() 來自定義其他異常響應(yīng)格式。

protected function convertExceptionToArray(Exception $e)
{
 return config('app.debug') ? [
  'code' => 0,
  'data' => $e->getMessage(),
  'exception' => get_class($e),
  'file' => $e->getFile(),
  'line' => $e->getLine(),
  'trace' => collect($e->getTrace())->map(function ($trace) {
   return Arr::except($trace, ['args']);
  })->all(),
 ] : [
  'code' => 0,
  'data' => $this->isHttpException($e) ? $e->getMessage() : 'Server Error',
 ];
}

強(qiáng)制 json 響應(yīng)

代碼中多次出現(xiàn)了 expectsJson() ,此方法是用來判斷返回 json 響應(yīng)還是普通響應(yīng)。

public function expectsJson()
{
 return ($this->ajax()  ! $this->pjax()  $this->acceptsAnyContentType()) || $this->wantsJson();
}

以下兩種條件下,會返回json響應(yīng)。

非XML請求、非pjax并且 Headers 中 Accept 設(shè)置為接收所有格式響應(yīng);

Headers Accept 設(shè)置為 /json、+json。如:Accept:application/json。

除此之外的情況,將不會響應(yīng)json。我們可以利用中間件強(qiáng)制追加 Accept:application/json,使異常響應(yīng)時都返回json。(參考教程 L03 6.0 中提到的方法)

創(chuàng)建中間件 AcceptHeader

?php

namespace App\Http\Middleware;

use Closure;

class AcceptHeader
{
 public function handle($request, Closure $next)
 {
  $request->headers->set('Accept', 'application/json');

  return $next($request);
 }
}

在 app/Http/Kernel.php 中,將中間件加入路由組即可。

protected $middlewareGroups = [
 'web' => [
  .
  .
  .
 'api' => [
  \App\Http\Middleware\AcceptHeader::class,
  'throttle:60,1',
  'bindings',
 ],
];

大功告成。

總結(jié)

到此這篇關(guān)于Laravel如何實(shí)現(xiàn)適合Api的異常處理響應(yīng)格式的文章就介紹到這了,更多相關(guān)Laravel適合Api的異常處理響應(yīng)格式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Laravel5.5+ 使用API Resources快速輸出自定義JSON方法詳解
  • laravel接管Dingo-api和默認(rèn)的錯誤處理方式
  • 在Laravel中使用GuzzleHttp調(diào)用第三方服務(wù)的API接口代碼
  • Laravel實(shí)現(xiàn)ApiToken認(rèn)證請求
  • laravel框架 api自定義全局異常處理方法
  • laravel dingo API返回自定義錯誤信息的實(shí)例
  • laravel 配置路由 api和web定義的路由的區(qū)別詳解
  • Laravel5.4簡單實(shí)現(xiàn)app接口Api Token認(rèn)證方法
  • 詳解Laravel制作API接口

標(biāo)簽:白城 黃石 郴州 瀘州 迪慶 綿陽 貴陽 雞西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Laravel如何實(shí)現(xiàn)適合Api的異常處理響應(yīng)格式》,本文關(guān)鍵詞  Laravel,如何,實(shí)現(xiàn),適合,Api,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Laravel如何實(shí)現(xiàn)適合Api的異常處理響應(yīng)格式》相關(guān)的同類信息!
  • 本頁收集關(guān)于Laravel如何實(shí)現(xiàn)適合Api的異常處理響應(yīng)格式的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚洲一区在线观看网站| 色先锋影音岛国av资源| 久久亚洲精品大全| 岛国一区二区三区高清视频| 亚洲黄色小说视频| 国产一二三区在线| 亚洲在线观看免费视频| 久久影视一区| 91精品国产91久久久久久最新毛片| 亚洲精品自在久久| 国产亚洲欧美日韩在线一区| 亚洲精品一线| 久久精品国产亚洲av高清色欲| 成人在线日韩| 久久99青青| 亚洲一区二区三区精品在线观看| h网站在线播放| caoporn免费在线视频| 天堂va在线高清一区| 综合网日日天干夜夜久久| 欧美乱妇高清无乱码免费| 中国xxx69视频| 久久久久久久波多野高潮日日| 成人免费高清在线| 人体久久天天| 日本一二三区在线视频| 亚洲国产视频在线| 黄色视屏在线免费观看| 中文字幕中文字幕一区| 啪啪亚洲精品| 无码熟妇人妻av在线电影| 免费99热在线观看| 国产精国产精品| 国产麻豆午夜三级精品| 国产成人成网站在线播放青青| 亚洲国产精品一区在线观看不卡| 欧美性69xxxx肥| 黄色一级片免费的| 成人一级视频| 26uuu色噜噜精品一区| 毛片在线网址播放| 中文字幕一区久| 国产情侣呻吟对白高潮| 中文字幕成人| 色先锋影音岛国av资源| 日韩av色在线| 免费观看成年人视频在线观看| 黄色国产精品视频| 成年人视频在线免费看| 色欧美在线观看| 欧美人与牲禽动交com| 免费黄色在线看| 中文字幕第7页| free性中国hd国语露脸| xxx性欧美在线| jizzjizz亚洲| 孩娇小videos精品| 在线观看av一区二区| 亚洲va久久久噜噜噜久久天堂| 久久蜜桃一区二区| av小说在线播放| 在线免费观看av电影| 国产精品777| 欧日韩不卡在线视频| 日本在线аv| 日本免费看黄| 嫩草影院2018| 国产一区二区黑人欧美xxxx| 久久精品国产久精国产一老狼| 丝袜制服一区二区三区| gogo大胆日本视频一区| av五月天在线| 综合国产视频| 91视视频在线直接观看在线看网页在线看| 91久久偷偷做嫩草影院电| 亚洲成人手机在线观看| 成人av中文字幕| 亚洲视频在线观看一区二区三区| 91精品啪在线观看国产81旧版| 国产免费xxx| 91gao视频| 高清视频国产| 三上悠亚在线一区二区| 成人激情电影在线| 91天堂在线观看| а√天堂8资源中文在线| av毛片在线免费| 97在线看免费观看视频在线观看| 国产麻豆一精品一男同| www.四虎网站| 亚洲一区中文在线| 26uuu精品一区二区在线观看| 毛片基地黄久久久久久天堂| 中国精品一区二区| 秋霞av在线| 99热精品国产| 亚洲一区二区三区四区电影| 黑人一区二区三区| 在线成人激情视频| 欧美一二三四五区| 国产一区视频观看| 日韩一区二区免费高清| 久久资源免费视频| 午夜性色福利影院| 伊人网av在线| 91亚洲精品久久久| 香蕉视频免费版| 被黑人猛躁10次高潮视频| 日本一区二区在线看| wwwww黄色| 西瓜成人精品人成网站| 荫蒂被男人添免费视频| 国产人伦精品一区二区| 色佬视频在线观看| 天天爽人人爽夜夜爽| 狂野欧美性猛交xxxxx视频| 最新欧美色图| 99久久国产免费| 亚洲精品国产无天堂网2021| 91麻豆精品国产91久久久| 亚洲av无码国产精品久久| 欧美a在线视频| 91成人免费在线观看| 色婷婷激情综合| 日本韩国欧美在线| 国产尤物在线观看| 99视频精品全部免费在线视频| 天天干天天色天天干| 三级久久三级久久久| 国产99精品视频| 五月激情六月丁香| 精品国产亚洲av麻豆| 114国产精品久久免费观看| 美女日批视频在线观看| 93久久精品日日躁夜夜躁欧美| 男女免费观看在线爽爽爽视频| 亚洲福利精品| 久久婷婷人人澡人人喊人人爽| 无码一区二区精品| 亚洲精品永久免费视频| 牛牛精品在线| 中文字幕一区二区三区人妻在线视频| 日韩精品999| 国产黄色免费在线观看| 欧美精品一区二区三区很污很色的| 麻豆精品一区二区三区| 欧美日韩国产在线观看网站| 四川一级毛毛片| 好吊一区二区三区视频| 国产嫩草在线视频| 亚洲欧洲国产精品| 中文字字幕在线观看| 中文字幕人成高清视频| 少妇bbw搡bbbb搡bbbb| 亚洲国产高清高潮精品美女| 欧洲精品99毛片免费高清观看| 午夜精品国产更新| 色哟哟免费视频| 九七影院97影院理论片免费| 中国免费黄视频| 麻豆av电影| 羞羞影视羞羞在线| 国产日韩视频一区二区三区| 91在线资源| 秋霞国产午夜精品免费视频| 麻豆freexxxx性91精品| 国产chinasex对白videos麻豆| av免费观看久久| 亚洲天堂中文字幕在线| 国产真人做爰视频免费| 欧美一级电影网站| 色男人天堂av| 女生裸体视频网站免费观看| 国产精品久久久久久久无码| 香蕉视频在线免费看| 亚洲精选视频免费看| 国产校园另类小说区| 色综合久久久久综合体桃花网| 亚洲丰满在线| 国产在线一区二区综合免费视频| 青青青青久久精品国产一百度| 国内精品久久久久久久果冻传媒| 日韩成人一区| 日韩高清av在线| 亚洲国产精品一| 99成人超碰| 欧美整片在线观看| 日本欧美在线| 96sao在线精品免费视频| 亚洲自拍小视频| 特大巨黑人吊性xxxxn38| 成人c视频免费高清在线观看| 国产精品美女| 欧美久久久久久久| 欧美少妇在线观看| av在线free| 欧美激情一区二区三区高清视频| 影音先锋在线视频| 日本国产一区| 中国一级片黄色一级片黄| 91嫩草在线播放| 国产一级伦理片| 成人午夜影院在线观看| 久久久www免费人成精品| www.午夜精品| 亚洲精品永久免费| 亚洲二区视频| 翔田千里在线视频| 中文字幕有码视频| 色综合色综合色综合| 亚洲成av人片一区二区梦乃| 九九在线观看视频| 国产成人a亚洲精品| 狠狠操第一页| 91久久国产综合久久91| 国产精品专区一| 亚洲国产精品高清| 亚洲精品国产综合久久| 欧美精品黑人性xxxx| 免费看一级一片| 久久人妻无码一区二区| 欧美一级淫片免费视频魅影视频| 国产精品v欧美精品∨日韩| 日韩av卡一卡二| 性欧美18—19sex性高清| 久久视频精品在线| 国产a级毛片一区| 国产视频久久久久久久| 91九色视频蝌蚪| 日韩欧美成人一区| jizz老师| 先锋资源av在线| 欧美福利一区| 一个人看的www视频免费在线观看| 成年人免费视频观看| 韩国成人漫画| 亚洲一区二区黄| 欧美日本视频一区| heyzo在线观看| 久久精品国产精品| 国产导航在线| 国内毛片毛片毛片毛片毛片| 日韩免费高清在线观看| 中文字幕亚洲欧美日韩| 亚洲伊人网在线观看| 欧美知名女优| 国产一区二区三区视频免费| 在线看片第一页欧美| 日韩免费一区二区三区| 精品人妻午夜一区二区三区四区| 欧洲美女女同性互添| 国产免费自拍视频| 久久综合毛片| 亚洲乱码精品一二三四区日韩在线| 国产精品18久久久久久麻辣| 亚洲网站啪啪| 欧美丰满少妇xxxxx高潮对白| 国产精品日本| 欧美欧美午夜aⅴ在线观看| 青青草视频社区| 一级片视频免费看| 国内在线高清免费视频| 九九热国产在线| 国产成人综合一区| 2012中文字幕在线视频| 给我看免费高清在线观看| 国产又黄又粗又猛又爽| 久草精品视频在线观看| 捆绑调教美女网站视频一区| 欧美高清日韩| 不卡视频在线看| 亚洲欧美综合另类| 一本大道东京热无码aⅴ| 超碰超碰在线| 视频一区国产视频| 中文字幕一二三四区| 欧美bbxxx| 欧美性www| av在线播放网站| 欧美人与动牲交xxxxbbbb| 999国产精品999久久久久久| 美女精品视频在线| 成人久久久精品乱码一区二区三区| 亚洲国产成人精品综合99| 天堂午夜在线| 视频二区一区| 7777女厕盗摄久久久| 国产又粗又硬又长| 亚洲精品永久免费| 国产日韩欧美综合| 成人性色av| 日韩av电影资源网| 成人小视频在线看| 911福利视频| 久久一区二区三区国产精品| 久久久综合久久| 亚洲精品国久久99热| 欧美精品福利在线| 触手亚洲一区二区三区| 美女视频黄a视频全免费观看| 被弄出白浆喷水了视频| 欧美成年人视频在线观看| 超碰人人干人人| 好吊一区二区三区视频| 日韩欧美成人激情| 色狼人综合干| 亚洲成人动漫精品| 欧美三区不卡| 青青在线视频一区二区三区| 激情婷婷久久| 欧美天堂社区| 精品国产亚洲在线| 在线成人激情黄色| 国产亚洲一区二区三区在线观看| 韩国视频理论视频久久| 无需播放器亚洲| 97se亚洲国产综合自在线不卡| 亚洲免费av片| 欧美成人午夜做爰视频在线观看| 一级做a爱片性色毛片| 亚洲欧美日韩直播| 尤物视频在线观看| 国产精品嫩草av| 郴州新闻综合频道在线直播| 91香蕉国产线在线观看| 日韩成人在线视频观看| 国产一区二区三区黄| 老司机午夜免费福利|