https://jsonapi.org/examples/#error-objects-basics
composer require sinema/json-api-error-laravel
In your Laravel controller:
<?php
namespace App\Http\Controllers;
use Sinemah\JsonApi\Error\Error;
use Sinemah\JsonApi\Error\Responses\Laravel;
use Illuminate\Http\JsonResponse;
class AnyController extends Controller
{
public function show(): JsonResponse
{
return Laravel::get()->json(
Error::fromArray(
[
'status' => 404,
'source' => null,
'title' => 'Item not found',
'detail' => sprintf('Item %s not found', request('item_uuid')),
]
),
404
);
}
}
Response
{
"errors": [
{
"status": 404,
"title": "Item not found",
"detail": "Item bd11f048-8663-4d95-8c7a-02a5579b0682 not found in customer data"
}
]
}
Build an error stack.
<?php
namespace App\Http\Controllers;
use Sinemah\JsonApi\Error\Error;
use Sinemah\JsonApi\Error\Responses\Laravel;
use Illuminate\Http\JsonResponse;
class AnyController extends Controller
{
public function show(): JsonResponse
{
return Laravel::get()
->add(Error::fromArray(['status' => 500, 'code' => 'first_error']))
->add(Error::fromArray(['status' => 500, 'code' => 'second_error']))
->add(Error::fromArray(['status' => 500, 'code' => 'third_error']))
->json();
}
}
Response
{
"errors": [
{
"status": 500,
"code": "first_error"
},
{
"status": 500,
"code": "second_error"
},
{
"status": 500,
"code": "third_error"
}
]
}
You do not need to pass a status code via the json method. The status code will be fetched from the first error you pushed in the bag.
->json()
You can also overwrite the status code with the json method.
->json(null, 401)