lanin/laravel-api-exceptions

适用于 Laravel 和 Lumen 的 JSON REST API 的异常一站式解决方案。

4.0.0 2023-04-13 07:39 UTC

README

Travis

适用于 Laravel 和 Lumen 的 JSON REST API 的异常一站式解决方案。

关于

本包的目标是提供在开发 JSON REST API 时可能需要的最常见异常集合。它还

  • 处理异常输出。
  • 将异常报告记录到日志中。
  • 覆盖默认验证器,使验证错误更详细。
  • 有一个 FormRequest,用于处理验证错误并将它们传递到 ApiExceptions 层。

安装

PHP 5.4+ 或 HHVM 3.3+,以及 Composer 和 Laravel 5.1+ 是必需的。

要获取 Laravel Laravel-API-Debugger 的最新版本,只需将以下行添加到您的 composer.json 文件的 require 块中。

对于 Laravel 5.1

"lanin/laravel-api-exceptions": "^0.1.0"

对于 Laravel 5.3

"lanin/laravel-api-exceptions": "^1.0.0"

然后您需要运行 composer installcomposer update 来下载它并更新自动加载器。

一旦安装了 Laravel-API-Exceptions,如果您使用的是 Laravel 5.1、5.2、5.3 和 5.4,则需要注册服务提供程序。打开 config/app.php 并将以下内容添加到 providers 键中。

Lanin\Laravel\ApiExceptions\ApiExceptionsServiceProvider::class,

如果您使用的是 Laravel 5.5,您不需要在 config/app.php 中添加任何内容。它将使用 Laravel 5.5 的包自动发现功能。

异常

每个 ApiException 都可以抛出为正常异常,并且它们将自动序列化为 JSON,并带有相应的 HTTP 状态码,如果用户需要 JSON

{
    "id": "not_found",
    "message": "Requested object not found."
}

APP_DEBUG 为 true 时,此对象还将填充跟踪信息。

它还可以具有 meta 属性,当存在附加信息时。例如,对于验证错误

{
	"id": "validation_failed",
	"message": "Validation failed.",
	"meta": {
		"errors": {
			"tags": [{
				"rule": "max.array",
				"message": "The tags may not have more than 10 items.",
				"parameters": ["10"]
			}]
		}
	}
}

对于 ValidationApiException,meta 属性包含 errors 对象,其中包含验证错误。此对象的每个属性都是一个请求参数的名称,其值是一个包含错误描述的数组。

自定义

您可以通过覆盖 ExceptionsHandler 中的 formatApiResponse 方法来自定义 APU 响应的错误。

例如,如果您想在 error 属性下放所有内容,您可以这样做

/**
 * Format error message for API response.
 *
 * @param  ApiException  $exception
 * @return mixed
 */
protected function formatApiResponse(ApiException $exception)
{
    return [
        'error' => $exception->toArray(),
    ];
}

处理器

通过扩展默认异常处理器

  • \Lanin\Laravel\ApiExceptions\LaravelExceptionHandler 用于 Laravel
  • \Lanin\Laravel\ApiExceptions\LumenExceptionHandler 用于 Lumen

并删除其他所有内容。示例

<?php

namespace App\Exceptions;

use Lanin\Laravel\ApiExceptions\LaravelExceptionHandler;

class Handler extends LaravelExceptionHandler
{

}

FormRequest

要使用 FormRequest,请将所有您的 Request 类扩展为 \Lanin\Laravel\ApiExceptions\Support\Request。它将自动支持验证错误并将它们传递到输出。

它还有一个非常方便的辅助方法 validatedOnly(),它只从请求中返回在 rules 方法中注册的项目。

贡献

请随意分叉此包,并通过提交拉取请求来增强功能以做出贡献。