Skip to content
This repository was archived by the owner on Sep 30, 2018. It is now read-only.

Repository files navigation

Build StatusLatest Stable VersionLicense

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:

<?phpuseRadweb\JsonExceptionFormatter\FormatterInterface;
class CustomDebugFormatter implements FormatterInterface {
publicfunctionformatDebug(Exception$e)
{
returnarray(
'theError' => array(
'message' => $e->getMessage(),
'detail' => 'In file '.$e->getFile().' on line '.$e->getLine(),
),
);
}
publicfunctionformatPlain(Exception$e)
{
returnarray(
'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

About

A small Laravel package to format & output exceptions in JSON format when required.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages