48 lines
1.3 KiB
Markdown
48 lines
1.3 KiB
Markdown
# Error Handling
|
|
|
|
The `JsonApi` class can produce [JSON:API error responses](https://jsonapi.org/format/#errors) from exceptions.
|
|
|
|
This is achieved by passing the caught exception into the `error` method.
|
|
|
|
```php
|
|
try {
|
|
$response = $api->handle($request);
|
|
} catch (Exception $e) {
|
|
$response = $api->error($e);
|
|
}
|
|
```
|
|
|
|
## Error Providers
|
|
|
|
Exceptions can implement the `ErrorProviderInterface` to determine what status code will be used in the response, and any JSON:API error objects to be rendered in the document.
|
|
|
|
The interface defines two methods:
|
|
|
|
* `getJsonApiStatus` which must return a string.
|
|
* `getJsonApiErrors` which must return an array of JSON-serializable content, such as [json-api-php](https://github.com/json-api-php/json-api) error objects
|
|
|
|
```php
|
|
use JsonApiPhp\JsonApi\Error;
|
|
use Tobyz\JsonApiServer\ErrorProviderInterface;
|
|
|
|
class ImATeapotException implements ErrorProviderInterface
|
|
{
|
|
public function getJsonApiErrors(): array
|
|
{
|
|
return [
|
|
new Error(
|
|
new Error\Title("I'm a teapot"),
|
|
new Error\Status($this->getJsonApiStatus())
|
|
)
|
|
];
|
|
}
|
|
|
|
public function getJsonApiStatus(): string
|
|
{
|
|
return '418';
|
|
}
|
|
}
|
|
```
|
|
|
|
Exceptions that do not implement this interface will result in a generic `500 Internal Server Error` response.
|