radweb / json-exception-formatter
JSON for your Exceptions
Installs: 2 103
Dependents: 1
Suggesters: 0
Security: 0
Stars: 9
Watchers: 7
Forks: 4
Open Issues: 1
Requires
- php: >=5.3.0
- illuminate/http: 4.*
- illuminate/support: 4.*
Requires (Dev)
- phpspec/phpspec: 2.0.*@dev
This package is not auto-updated.
Last update: 2024-12-21 15:34:26 UTC
README
Laravel JSON Exception Formatter
A small Laravel package to format & output exceptions in JSON format when required.
By default in Laravel, throwing an Exception in debug mode will display a nice JSON response when required (eg. an AJAX response, or an Accept: application/javascript
header).
However once you're not in debug mode (ie. a production environment), a whole HTML response is displayed instead.
With this package, when you're not in debug mode, exceptions will be output as JSON (only without debug information like the file name & line number).
NOTE This does NOT affect HTML requests. Only AJAX/JSON requests are altered.
Installation
Add radweb/json-exception-formatter
to your composer.json
file.
{ "require": { "radweb/json-exception-formatter": "dev-master" } }
In app/config/app.php
, add the Service Provider to the providers
array:
array( 'providers' => array( // ... 'Radweb\JsonExceptionFormatter\JsonExceptionFormatterServiceProvider', ) )
Custom Formatters
You can override the default JSON exception formatter to use a different format, or provide more detail in the output.
To override, implement the Radweb\JsonExceptionFormatter\FormatterInterface
interface, and bind with the IoC container. This requires you to implement two methods: formatDebug()
and formatPlain()
.
Example implementation:
<?php use Radweb\JsonExceptionFormatter\FormatterInterface; class CustomDebugFormatter implements FormatterInterface { public function formatDebug(Exception $e) { return array( 'theError' => array( 'message' => $e->getMessage(), 'detail' => 'In file '.$e->getFile().' on line '.$e->getLine(), ), ); } public function formatPlain(Exception $e) { return array( 'theError' => array( 'message' => $e->getMessage(), // we don't want to display debug details in production ), ); } }
Now we just have to bind it in the IoC container. Add this anywhere in your app's bootstrap code (if you have nowhere, routes.php
will do):
App::bind('Radweb\JsonExceptionFormatter\FormatterInterface', 'CustomDebugFormatter');
Preview
Normal Request, Debug Mode ENABLED
Normal Request, Debug Mode DISABLED
JSON Request, Debug Mode ENABLED
JSON Request, Debug Mode DISABLED