在最近的開發開發項目中,我使用了Dingo/Api這個第三方Api庫。
Dingo是個很強大的Api庫, 但在開發的過程中,需要自定義響應字段。
剛開始使用Ding/Api時,返回如下:
php自定義函數的關鍵字?{
"message": "422 Unprocessable Entity",
"errors": {
"mobile": [
php調用golang?"手機號格式不正確"
]
},
"status_code": 422
php全局變量?}
這是輸入字段驗證錯誤時,Dingo返回的結果。
這樣看上去沒什么問題。因為這邊 status_code 是比較規范的。對于 PHP 來說,直接 json_decode 之后,并沒有什么難辦的地方。但是對面安卓和 IOS 則是使用的強類型語言。尤其是 Java,需要對每一個 Json 對象進行新建,然后序列化。所以,這種格式不統一的返回結果,是無法接受的
解決方法: 我們需要將所有的異常信息歸總到一個地方,在AppServiceProvider的boot()方法中添加
php創建函數,// 將所有的 Exception 全部交給 App\Exceptions\Handler 來處理
app('api.exception')->register(function (Exception $exception) {
$request = Illuminate\Http\Request::capture();
return app('App\Exceptions\Handler')->render($request, $exception);
php 自定義模板標簽、});
然后在App\Exceptions\Handler.php中的render()方法中:
$class = get_class($exception);
switch ($class) {
php類。case 'Dingo\Api\Exception\ValidationHttpException':
if ($request->expectsJson())
return $this->errorRespond($exception->getErrors()->first(), $exception->getStatusCode());
break;
php laravel框架,default:
if ($request->expectsJson())
return $this->errorRespond('系統休息了', 500000);
break;
}
再次訪問接口:
{
"response_status_code": 422,
"response_message": "請填寫手機號",
"data": []
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态