Laravel уже может управлять ответами json по умолчанию.
Без настройки метода рендеринга в app \ Handler.php вы можете просто сгенерировать Symfony \ Component \ HttpKernel \ Exception \ HttpException, обработчик по умолчанию распознает, если заголовок запроса содержит Accept: application / json и распечатает сообщение об ошибке json соответственно.
Если включен режим отладки, он также выведет трассировку стека в формате json.
Вот краткий пример:
<?php
...
use Symfony\Component\HttpKernel\Exception\HttpException;
class ApiController
{
public function myAction(Request $request)
{
try {
// My code...
} catch (\Exception $e) {
throw new HttpException(500, $e->getMessage());
}
return $myObject;
}
}
Вот ответ laravel с отключенной отладкой
{
"message": "My custom error"
}
А вот ответ с отладкой на
{
"message": "My custom error",
"exception": "Symfony\\Component\\HttpKernel\\Exception\\HttpException",
"file": "D:\\www\\myproject\\app\\Http\\Controllers\\ApiController.php",
"line": 24,
"trace": [
{
"file": "D:\\www\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\ControllerDispatcher.php",
"line": 48,
"function": "myAction",
"class": "App\\Http\\Controllers\\ApiController",
"type": "->"
},
{
"file": "D:\\www\\myproject\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php",
"line": 212,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
...
]
}
Используя HttpException, вызов возвратит код состояния http по вашему выбору (в данном случае внутренняя ошибка сервера 500)