Skip to content

Instantly share code, notes, and snippets.

@sh7ning
Last active December 29, 2018 03:56
Show Gist options
  • Save sh7ning/ae08aa220c38fe3160d8accae58775cf to your computer and use it in GitHub Desktop.
Save sh7ning/ae08aa220c38fe3160d8accae58775cf to your computer and use it in GitHub Desktop.
学习笔记

Exception处理

{
  "code" : 200,
  "data" : [],
  "error": '',
  "trace": array_slice($e->getTrace(), 0, 10),	//debug
}
slim: /vendor/slim/slim/Slim/Handlers/Error.php
		renderHtmlErrorMessage();

laravel handler.php

$status = 200;
        $headers = [];
        $error = 'system error';
        $code = Code::ERROR;
        if ($exception instanceof HttpException) {
            $status = $exception->getStatusCode();
            $headers = $exception->getHeaders();
            $error = $exception->getMessage();
            $code = $exception->getCode();
        } else if ($exception instanceof ValidationException) {
            $errors = $exception->errors();
            $error = current($errors)[0];
            $code = Code::PARAMETER_ERROR;
        }

        $ret = [
            'code'      => $code, //错误代码 0:正确,非0:错误
            'data'      => null, //返回数据体
            'error'     => $error, //返回消息
            'timestamp' => round(microtime(true) * 1000),
        ];

        if (env('APP_DEBUG')) {
            $ret['trace'] = $this->getTraceString($exception);
        }
        return response()->json($ret, $status, $headers);
if ($request->expectsJson()) {
    //获取异常信息

    $errorMsg = $e->getMessage();
    $statusCode = 500; //异常 状态码
    $headers = []; //异常 header

    if ($e instanceof ModelNotFoundException) {
	$statusCode = 404;
    } elseif ($e instanceof AuthorizationException) {
	$statusCode = 403;
    } elseif ($e instanceof ValidationException && $e->getResponse()) {
    	$statusCode = $e->getResponse()->getStatusCode();
	$errors = (array) $e->validator->errors()->getMessages();
	$errorMsg = array_pop($errors)[0];    //两层数据结构
    } elseif ($e instanceof HttpExceptionInterface) {
	$statusCode = $e->getStatusCode();
	$headers = array_merge($headers, $e->getHeaders());
    }

    $errorMsgArr = json_decode($errorMsg, true);
    $errorMsg = is_array($errorMsgArr) ? $errorMsgArr : [$errorMsg];

    $response = [
        'success'   => false,
        'data'      => [],
        'errors'    => $errorMsg,
        'trace'     => env('APP_DEBUG', false) ? array_slice($e->getTrace(), 0, 5) : [],
    ];

    return response()->json($response, $statusCode, $headers);
}

return parent::render($request, $e);

Lumen handler.php

if ($request->expectsJson()) {
    //获取异常信息

    //获取异常 状态码/header
    $statusCode = 500;
    $headers = [];
    $errorMsg = $e->getMessage();

    if ($e instanceof ModelNotFoundException) {
	$statusCode = 404;
    } elseif ($e instanceof AuthorizationException) {
	$statusCode = 403;
    } elseif ($e instanceof ValidationException && $e->getResponse()) {
    	$statusCode = $e->getResponse()->getStatusCode();
	$errors = (array) $e->validator->errors()->getMessages();
	$errorMsg = array_pop($errors)[0];    //两层数据结构
    } elseif ($e instanceof HttpExceptionInterface) {
	$statusCode = $e->getStatusCode();
	$headers = array_merge($headers, $e->getHeaders());
    }


    $errorMsgArr = json_decode($errorMsg, true);
    $errorMsg = is_array($errorMsgArr) ? $errorMsgArr : [$errorMsg];

    $response = [
        'success'   => false,
        'data'      => [],
        'errors'    => $errorMsg,
        'trace'     => env('APP_DEBUG', false) ? array_slice($e->getTrace(), 0, 5) : [],
    ];

    return response()->json($response, $statusCode, $headers);
}

return parent::render($request, $e);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment