, (*1)
, (*2)
A small Laravel package to format & output exceptions in JSON format when required., (*3)
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)., (*4)
However once you're not in debug mode (ie. a production environment), a whole HTML response is displayed instead., (*5)
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)., (*6)
NOTE This does NOT affect HTML requests. Only AJAX/JSON requests are altered., (*7)
Installation
Add radweb/json-exception-formatter
to your composer.json
file., (*8)
{
"require": {
"radweb/json-exception-formatter": "dev-master"
}
}
In app/config/app.php
, add the Service Provider to the providers
array:, (*9)
array(
'providers' => array(
// ...
'Radweb\JsonExceptionFormatter\JsonExceptionFormatterServiceProvider',
)
)
You can override the default JSON exception formatter to use a different format, or provide more detail in the output., (*10)
To override, implement the Radweb\JsonExceptionFormatter\FormatterInterface
interface, and bind with the IoC container. This requires you to implement two methods: formatDebug()
and formatPlain()
., (*11)
Example implementation:, (*12)
<?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):, (*13)
App::bind('Radweb\JsonExceptionFormatter\FormatterInterface', 'CustomDebugFormatter');
Preview
Normal Request, Debug Mode ENABLED, (*14)
, (*15)
Normal Request, Debug Mode DISABLED, (*16)
, (*17)
JSON Request, Debug Mode ENABLED, (*18)
, (*19)
JSON Request, Debug Mode DISABLED, (*20)
, (*21)