elsayed85 / laravel-api-exceptions
Laravel 和 Lumen JSON REST API 异常的全能解决方案。
Requires
- php: ^7.2|^8.0
- illuminate/support: ^7.0|^8.0|^9.0
Requires (Dev)
- mockery/mockery: ^1.0
- orchestra/testbench: ^5.0
- phpunit/phpunit: ^8.0
README
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 install
或 composer 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()
,它从请求中返回仅在规则方法中注册的项目。
贡献
请随意叉取此包,并通过提交拉取请求来增强功能进行贡献。