成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Laravel+Dingo/Api 自定義響應(yīng)

xcold / 2447人閱讀

摘要:在最近的開發(fā)開發(fā)項(xiàng)目中,我使用了這個(gè)第三方庫(kù)。是個(gè)很強(qiáng)大的庫(kù),但在開發(fā)的過程中,需要自定義響應(yīng)字段。剛開始使用時(shí),返回如下手機(jī)號(hào)格式不正確這是輸入字段驗(yàn)證錯(cuò)誤時(shí),返回的結(jié)果。尤其是,需要對(duì)每一個(gè)對(duì)象進(jìn)行新建,然后序列化。

在最近的開發(fā)開發(fā)項(xiàng)目中,我使用了Dingo/Api這個(gè)第三方Api庫(kù)。
Dingo是個(gè)很強(qiáng)大的Api庫(kù), 但在開發(fā)的過程中,需要自定義響應(yīng)字段。

剛開始使用Ding/Api時(shí),返回如下:

{
    "message": "422 Unprocessable Entity",
    "errors": {
        "mobile": [
            "手機(jī)號(hào)格式不正確"
        ]
    },
    "status_code": 422
}

這是輸入字段驗(yàn)證錯(cuò)誤時(shí),Dingo返回的結(jié)果。

這樣看上去沒什么問題。因?yàn)檫@邊 status_code 是比較規(guī)范的。對(duì)于 PHP 來說,直接 json_decode 之后,并沒有什么難辦的地方。但是對(duì)面安卓和 IOS 則是使用的強(qiáng)類型語(yǔ)言。尤其是 Java,需要對(duì)每一個(gè) Json 對(duì)象進(jìn)行新建,然后序列化。所以,這種格式不統(tǒng)一的返回結(jié)果,是無(wú)法接受的

解決方法: 我們需要將所有的異常信息歸總到一個(gè)地方,在AppServiceProviderboot()方法中添加

// 將所有的 Exception 全部交給 AppExceptionsHandler 來處理
app("api.exception")->register(function (Exception $exception) {
    $request = IlluminateHttpRequest::capture();
    return app("AppExceptionsHandler")->render($request, $exception);
}); 

然后在AppExceptionsHandler.php中的render()方法中:

$class = get_class($exception);
switch ($class) {
    case "DingoApiExceptionValidationHttpException":
        if ($request->expectsJson())
            return $this->errorRespond($exception->getErrors()->first(), $exception->getStatusCode());
        break;

    default:
        if ($request->expectsJson())
            return $this->errorRespond("系統(tǒng)休息了", 500000);

        break;
}

再次訪問接口:

{
    "response_status_code": 422,
    "response_message": "請(qǐng)?zhí)顚懯謾C(jī)號(hào)",
    "data": []
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30097.html

相關(guān)文章

  • Laravel Api 開發(fā)系列 - Dingo API 的使用

    摘要:源碼使用本文使用的數(shù)據(jù)庫(kù)與基礎(chǔ)篇相同,故不再重復(fù)說明。使用的用法與之前的自定義用法類似,甚至更加簡(jiǎn)單。首先定義路由如果要查看路由,需要使用創(chuàng)建控制器需要使用這個(gè)。 源碼 使用 Dingo Api 本文使用的數(shù)據(jù)庫(kù)與基礎(chǔ)篇相同,故不再重復(fù)說明。 初始化 安裝 $ composer require dingo/api:1.0.x@dev 注冊(cè) /config/app.php provide...

    jlanglang 評(píng)論0 收藏0
  • laravelDingo api如何Custom ExceptionHandler

    摘要:背景在近期使用處理接口時(shí),發(fā)現(xiàn)本身中無(wú)法捕獲異常。后來查閱資料發(fā)現(xiàn),接管了請(qǐng)求的異常處理。導(dǎo)致無(wú)法自定義錯(cuò)誤返回,很是頭疼。最后在的找到了處理方法。 背景 在近期使用Dingo api處理接口時(shí),發(fā)現(xiàn)laravel本身appExceptionsHandler中無(wú)法捕獲異常。 后來查閱資料發(fā)現(xiàn),Dingo api接管了api請(qǐng)求的異常處理。導(dǎo)致無(wú)法自定義錯(cuò)誤返回,很是頭疼。 最后在di...

    Ku_Andrew 評(píng)論0 收藏0
  • 五分鐘入門 Dingo API

    摘要:雖然這個(gè)方案的目標(biāo)是盡可能保持靈活性,但它仍然不能涵蓋所有情況并解決所有問題。這個(gè)是調(diào)度器的,并提供了一些好用的輔助方法。如果有什么問題或者文章有哪些錯(cuò)誤,請(qǐng)?jiān)谠u(píng)論區(qū)回復(fù),及時(shí)阻止我誤導(dǎo)他人。 showImg(https://segmentfault.com/img/bVbc1VY?w=1560&h=620); 基于 https://laravel-china.org/doc... 文...

    Paul_King 評(píng)論0 收藏0
  • laravel 5.4 + dingo api + jwt 代替Passport

    摘要:前言由于在度娘找了半天根本一大堆版本,弄得我死去活來的,每個(gè)都試了一堆問題,到底你們做完有沒有總結(jié)過一次然后有幾個(gè)使用,完全不行啊,太監(jiān)版不是我想要的。后來,終于找到例子并實(shí)測(cè)成功。 前言 由于在度娘找了半天根本一大堆Copy版本,弄得我死去活來的,每個(gè)都試了一堆問題,到底你們做完有沒有總結(jié)過一次?然后有幾個(gè)使用lunmen+dingo api+jwt,完全不行啊,太監(jiān)版不是我想要的。...

    _Zhao 評(píng)論0 收藏0
  • laravel5.5+dingo+JWT開發(fā)后臺(tái)API

    摘要:我的博客中文文檔中使用輔助文章參考這篇文章基本就能搭建出環(huán)境,我使用的版本跟他一樣,不知道別的版本有啥大的區(qū)別,但是網(wǎng)上找的其他一些文章使用的是舊的版本,封裝的東西路徑可能不一樣,可能會(huì)保錯(cuò),有些文檔還說要手動(dòng)添加和,其實(shí)新版本不需要。 我的github博客:https://zgxxx.github.io/ dingo api 中文文檔: https://www.bookstack....

    printempw 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<