前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >laravel Api开发之异常响应

laravel Api开发之异常响应

作者头像
切图仔
发布2022-09-14 14:58:12
6120
发布2022-09-14 14:58:12
举报
文章被收录于专栏:生如夏花绚烂

我们写接口时,往往需要根据业务逻辑返回给客户端一些异常信息,在laravel框架中实现很简单

1在.app/Exceptions/Handler.php中重写

Illuminate\Foundation\Exceptions\Handler的convertExceptionToArray方法,该方法源码

代码语言:javascript
复制
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',
        ];
    }

重写此方法主要是为了加入错误码如

代码语言:javascript
复制
{
    "message": "您还没有通过认证",
    "code": 1003
}

app/Exceptions/Handler.php重写加入code参数

代码语言:javascript
复制
protected function convertExceptionToArray(Exception $e)
    {
        return config('app.debug') ? [
            'message' => $e->getMessage(),
            'code' => $e->getCode(),
            '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',
            'code' => $e->getCode(),
        ];
    }

抛出异常 在控制器中经常要根据逻辑抛出异常,因此我们在控制器的基类Controller定义errorResponse方法

代码语言:javascript
复制
<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller as BaseController;
use Symfony\Component\HttpKernel\Exception\HttpException;

class Controller extends BaseController
{
    public function errorResponse($statusCode, $message=null, $code=0)
    {
        throw new HttpException($statusCode, $message, null, [], $code);
    }
}

这样我们在任何控制器都能使用$this->errorRespons()

示例

代码语言:javascript
复制
public function store(TopicRequest $request, Topic $topic)
    {
        return $this->errorResponse(403,'测试',1101);//测试抛出异常
        $topic->fill($request->all());
        $topic->user_id = $request->user()->id;
        $topic->save();

        return new TopicResource($topic);
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档