elsayed85/laravel-api-exceptions

Laravel 和 Lumen JSON REST API 异常的全能解决方案。

3.4.0 2022-04-14 12:56 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,它们将被自动序列化为 JSON,并带有相应的 HTTP 状态码。

{
    "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(),
    ];
}

处理器

通过扩展您的默认异常处理器来使用

  • 为 Laravel 使用 \Lanin\Laravel\ApiExceptions\LaravelExceptionHandler
  • 为 Lumen 使用 \Lanin\Laravel\ApiExceptions\LumenExceptionHandler

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

<?php

namespace App\Exceptions;

use Lanin\Laravel\ApiExceptions\LaravelExceptionHandler;

class Handler extends LaravelExceptionHandler
{

}

表单请求

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

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

贡献

请随意叉取此包,并通过提交拉取请求来增强功能进行贡献。