Laravel实践-自定义全局异常处理

字数 102阅读 6991

在做API时,需要对一些异常进行全局处理
比如添加用户执行失败时,需要返回错误信息

// 添加用户
$result = User::add($user);
if(empty($result)){
    throw new ApiException('添加失败');
}

API 回复
{
    "msg" : "添加失败",
    "data" : "",
    "status" : 0 // 0为执行错误
}

那么我们就需要添加一个全局异常处理,专门用来返回错误信息

步骤

  • 添加异常处理类
  • 修改laravel异常处理
1.添加异常处理类
./app/Exceptions/ApiException.php
<?php
namespace App\Exceptions;

class ApiException extends \Exception
{
    function __construct($msg='')
    {
        parent::__construct($msg);
    }
}
2.修改laravel异常处理
./app/Exceptions/Handler.php

// Handler的render函数
public function render($request, Exception $e)
{
    // 如果config配置debug为true ==>debug模式的话让laravel自行处理
    if(config('app.debug')){
        return parent::render($request, $e);
    }
    return $this->handle($request, $e);
}

// 新添加的handle函数
public function handle($request, Exception $e){
    // 只处理自定义的APIException异常
    if($e instanceof ApiException) {
        $result = [
            "msg"    => "",
            "data"   => $e->getMessage(),
            "status" => 0
        ];
        return response()->json($result);
    }
    return parent::render($request, $e);
}

大功告成....

推荐阅读更多精彩内容