hamidreza2005 / laravel-api-error-handler
a package for handle api errors
Installs: 2 318
Dependents: 0
Suggesters: 0
Security: 0
Stars: 7
Watchers: 1
Forks: 5
Open Issues: 0
Requires
- illuminate/support: ~6|~7|~8|~9|~10
Requires (Dev)
- orchestra/testbench: ^8.10
README
a useful package for handling exception in laravel.
📥 Installation
you can install this package via Composer:
composer require hamidreza2005/laravel-api-error-handler
and after installation you can run following command to publish config files
php artisan vendor:publish --tag laravel-api-error-handler
⚙️ Configuration
to configure this package go to config/api-error-handler.php
<?php return [ /* * this is where you define which handler deal with which errors. each handler can handle multiple errors */ "handlers" =>[ NotFoundExceptionHandler::class => [ "Symfony\Component\HttpKernel\Exception\NotFoundHttpException", "Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException" ], ServerInternalExceptionHandler::class => [ "ErrorException", "Illuminate\Database\QueryException" ], AccessDeniedExceptionHandler::class => [ "Illuminate\Auth\AuthenticationException", "Symfony\Component\HttpKernel\Exception\HttpException" ], ValidationExceptionHandler::class => [ "Illuminate\Validation\ValidationException" ], ], /* * if the app is not in debug mode. all unknown exceptions will be handled by this. */ "internal_error_handler" => ServerInternalExceptionHandler::class, ];
this package provides some handlers for common exceptions like ModelNotFound
But if you want to customize it you can do like this :
<?php return [ YourHandler::class => [ // exceptions ], ];
Class | Status Code | Message |
---|---|---|
NotFoundException | 404 | Not Found |
ServerInternalException | 500 | Server Internal Error |
AccessDeniedException | 403 | Access Denied |
ValidationException | 422 | all validation errors |
DefaultException | the status code of the Exception | the message of the Exception |
🚀 how to let handlers do their job ?
add ApiErrorHandler
trait to ExceptionHandler
located in app\Exceptions\Handler.php
:
<?php namespace App\Exceptions; use hamidreza2005\LaravelApiErrorHandler\Traits\ApiErrorHandler; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Throwable; class Handler extends ExceptionHandler { use ApiErrorHandler; /** * A list of the exception types that are not reported. * * @var array */ protected $dontReport = [ // ]; /** * A list of the inputs that are never flashed for validation exceptions. * * @var array */ protected $dontFlash = [ 'password', 'password_confirmation', ]; /** * Register the exception handling callbacks for the application. * * @return void */ public function register() { // } public function render($request, Throwable $e) { return $this->handle($this->prepareException($e)); } }
Register app\Exceptions\Handler.php
in AppServiceProvider:
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Contracts\Debug\ExceptionHandler; use App\Exceptions\Handler; class AppServiceProvider extends ServiceProvider { /** * Register any application services. */ public function register(): void { $this->app->singleton( ExceptionHandler::class, Handler::class ); } /** * Bootstrap any application services. */ public function boot(): void { // } }
Make Your Own Exception Handler!
if you want to make your own handler your class has to extend hamidreza2005\LaravelApiErrorHandler\Handlers\ExceptionHandler
i.e:
<?php class MyException extends ExceptionHandler { public function handleStatusCode():void { $this->statusCode = 499; } public function handleMessage():void { $this->message = "My Message"; } }
📜 License
The MIT License (MIT). Please see License File for more information.
🙋 Contributing
If you find an issue, or have a better way to do something, feel free to open an issue , or a pull request.