https://github.com/mlanin/laravel-api-exceptions
All in one solution for exception for JSON REST APIs on Laravel and Lumen.
https://github.com/mlanin/laravel-api-exceptions
api exceptions laravel
Last synced: about 1 month ago
JSON representation
All in one solution for exception for JSON REST APIs on Laravel and Lumen.
- Host: GitHub
- URL: https://github.com/mlanin/laravel-api-exceptions
- Owner: mlanin
- License: mit
- Created: 2016-06-30T09:33:28.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2025-02-27T07:26:58.000Z (about 1 year ago)
- Last Synced: 2025-10-24T18:14:15.508Z (4 months ago)
- Topics: api, exceptions, laravel
- Language: PHP
- Homepage: https://blog.lanin.me/api-exceptions-for-laravel/
- Size: 81.1 KB
- Stars: 40
- Watchers: 2
- Forks: 9
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Laravel-API-Exceptions
[](https://travis-ci.org/mlanin/laravel-api-exceptions)
> All in one solution for exception for JSON REST APIs on Laravel and Lumen.
## About
The goal of this package is to provide you with a set of most common exceptions that may be needed while developing JSON REST API. It also:
* Handles exceptions output.
* Handles exceptions report to logs.
* Overwrites default Validator to make validation errors more verbose.
* Has a FormRequest that to handle validation errors and pass them to ApiExceptions layer.
## Installation
[PHP](https://php.net) 5.4+ or [HHVM](http://hhvm.com) 3.3+, [Composer](https://getcomposer.org) and [Laravel](http://laravel.com) 5.1+ are required.
To get the latest version of Laravel Laravel-API-Debugger, simply add the following line to the require block of your `composer.json` file.
For Laravel 5.1
```
"lanin/laravel-api-exceptions": "^0.1.0"
```
For Laravel 5.3
```
"lanin/laravel-api-exceptions": "^1.0.0"
```
You'll then need to run `composer install` or `composer update` to download it and have the autoloader updated.
Once Laravel-API-Exceptions is installed, if you're using Laravel 5.1, 5.2, 5.3, and 5.4, you need to register the service provider. Open up `config/app.php` and add the following to the providers key.
```php
Lanin\Laravel\ApiExceptions\ApiExceptionsServiceProvider::class,
```
If you're using Laravel 5.5, you don't need to add anything in `config/app.php`. It will use package auto discovery feature in Laravel 5.5.
### Exceptions
Every ApiException can be thrown as a normal exception and they will be automatically serialized to JSON with corresponding HTTP status, if user wants json:
```json
{
"id": "not_found",
"message": "Requested object not found."
}
```
This object will be also populated with trace info, when `APP_DEBUG` is true.
Also it can have `meta` attribute when there is additional info. For example for validation errors:
```json
{
"id": "validation_failed",
"message": "Validation failed.",
"meta": {
"errors": {
"tags": [{
"rule": "max.array",
"message": "The tags may not have more than 10 items.",
"parameters": ["10"]
}]
}
}
}
```
For `ValidationApiException`, meta attribute has `errors` object that contains validations errors.
Every attribute of this object is a name of a request parameter to validate to and value is an array of errors with description.
#### Customization
You can customize errors APU response by overriding `formatApiResponse` method in your ExceptionsHandler.
For example if you want to put everything under `error` attribute, you can do it like this:
```php
/**
* Format error message for API response.
*
* @param ApiException $exception
* @return mixed
*/
protected function formatApiResponse(ApiException $exception)
{
return [
'error' => $exception->toArray(),
];
}
```
### Handler
Extend your default exceptions handler with:
* `\Lanin\Laravel\ApiExceptions\LaravelExceptionHandler` for Laravel
* `\Lanin\Laravel\ApiExceptions\LumenExceptionHandler` for Lumen
And remove everything else. Example:
```php