ApiError::__invoke()   A
last analyzed

Complexity

Conditions 4
Paths 2

Size

Total Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 20
rs 9.6
c 0
b 0
f 0
cc 4
nc 2
nop 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Handler;
6
7
use Psr\Http\Message\ServerRequestInterface as Request;
8
use Psr\Http\Message\ResponseInterface as Response;
9
10
final class ApiError extends \Slim\Handlers\Error
11
{
12
    public function __invoke(Request $request, Response $response, \Exception $exception)
13
    {
14
        $statusCode = 500;
15
        if (is_int($exception->getCode()) && $exception->getCode() >= 400 && $exception->getCode() <= 599) {
16
            $statusCode = $exception->getCode();
17
        }
18
        $className = new \ReflectionClass(get_class($exception));
19
        $data = [
20
            'message' => $exception->getMessage(),
21
            'class' => $className->getShortName(),
22
            'status' => 'error',
23
            'code' => $statusCode,
24
        ];
25
        $body = json_encode($data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
26
27
        return $response
28
                ->withStatus($statusCode)
29
                ->withHeader('Content-type', 'application/problem+json')
30
                ->write($body);
31
    }
32
}
33