radweb/json-exception-formatter
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

Related Packages
Powerful PHP database abstraction layer (DBAL) with many features for database s...
Laravel Serializable Closure provides an easy and secure way to serialize closur...
Cli error handling for console/command-line PHP applications.


