laravel默认的异常处理是展示出异常的界面,不能够完善的捕获异常并响应为json格式数据

需要修改下以下文件

app/Exceptions/Handler.php

 

namespace App\Exceptions;

use App\Lib\ApiHelper\ApiCode;

use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

use Illuminate\Support\Arr;

use Illuminate\Validation\ValidationException;

use Symfony\Component\HttpKernel\Exception\HttpException;

use Throwable;

class Handler extends ExceptionHandler

{

/**

* A list of the exception types that are not reported.

*

* @var array

*/

protected $dontReport = [

//

];

/**

* A list of the inputs that are never flashed for validation exceptions.

*

* @var array

*/

protected $dontFlash = [

'current_password',

'password',

'password_confirmation',

];

/**

* Register the exception handling callbacks for the application.

*

* @return void

*/

public function register()

{

$this->reportable(function (Throwable $e) {

//

});

}

public function render($request, Throwable $e)

{

switch ($e) {

case $e instanceof ValidationException:

$response = [

'errmsg' => Arr::first($e->errors())[0] ?? '请求参数不合法',

'errcode' => ApiCode::FAILED,

'data' => new \stdClass()

];

break;

case $e instanceof HttpException:

$response = [

'errmsg' => ApiCode::getMessage(ApiCode::FAILED_HTTP),

'errcode' => ApiCode::FAILED_HTTP,

'data' => new \stdClass()

];

break;

default:

$code = $e->getCode() ?: ApiCode::FAILED;

$response = [

'errmsg' => $e->getMessage() ?: ApiCode::getMessage($code),

'errcode' => $code,

'data' => new \stdClass()

];

}

if (config('app.debug')) {

$response['exception'] = get_class($e);

$response['message'] = $e->getMessage();

$response['trace'] = $e->getTrace();

}

return response()->json($response,200,[],JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE);

}

}

 

ApiCode类

app/Lib/ApiHelper/ApiCode.php

namespace App\Lib\ApiHelper;

class ApiCode

{

const OK = 20000;

const FAILED_PARAMES = 40001;

const FAILED = 50000;

const FAILED_NO_EXIST = 50001;

const FAILED_AUTH_EXPIRED = 50002;

const FAILED_HTTP = 50003;

public static $messageMapper = [

self::OK => '成功',

self::FAILED => '失败',

self::FAILED_HTTP => 'HTTP请求异常',

self::FAILED_NO_EXIST => '授权码不存在',

self::FAILED_AUTH_EXPIRED => '授权码过期'

];

/**

* Get code message

* @param $code

* @return string

*/

public static function getMessage($code)

{

return self::$messageMapper[$code] ?? '服务器未知错误';

}

}

 

推荐文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。