dmavrin/laravel-api-exceptions

为 Laravel 和 Lumen 上的 JSON REST API 提供一个全面的异常处理解决方案。

0.4.0 2017-03-21 09:36 UTC

This package is auto-updated.

Last update: 2024-09-23 21:16:41 UTC


README

为 Laravel 和 Lumen 上的 JSON REST API 提供一个全面的异常处理解决方案。

关于

此包的目的是为您提供一组在开发 JSON REST API 时可能需要的最常见异常。它还

  • 处理异常输出。
  • 将异常报告到日志中。
  • 重写默认的 Validator 以使验证错误更加详细。
  • 有一个 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": "^0.3.0"

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

安装 Laravel-API-Exceptions 后,您需要注册服务提供器。打开 config/app.php 并将以下内容添加到 providers 键中。

Lanin\Laravel\ApiExceptions\ApiExceptionsServiceProvider::class,

异常

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

{
    "error_id": "not_found",
    "error_message": "Requested object not found."
}

APP_DEBUG 为 true 时,此对象还将包含跟踪信息。

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

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

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

视图

从版本 0.3.0 开始,对于 Laravel 5.3 包,也可以返回错误(html)视图,如果 Accept 标头不等于 application/json

要更改包含的视图,请通过

$ php artisan vendor:publish --tag=laravel-api-exceptions

处理程序

通过以下方式扩展您默认的异常处理程序:

  • \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 方法中注册的项目。

贡献

请随意fork此包并通过提交拉取请求来贡献,以增强其功能。