ApiError   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 35
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 20
c 1
b 0
f 0
dl 0
loc 35
ccs 18
cts 18
cp 1
rs 10
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getStatusCode() 0 12 4
A __invoke() 0 19 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Handler;
6
7
use Psr\Http\Message\ResponseInterface as Response;
8
use Psr\Http\Message\ServerRequestInterface as Request;
9
10
final class ApiError extends \Slim\Handlers\Error
11
{
12 32
    public function __invoke(
13
        Request $request,
14
        Response $response,
15
        \Exception $exception
16
    ): Response {
17 32
        $statusCode = $this->getStatusCode($exception);
18 32
        $className = new \ReflectionClass($exception::class);
19
        $data = [
20 32
            'message' => $exception->getMessage(),
21 32
            'class' => $className->getName(),
22 32
            'status' => 'error',
23 32
            'code' => $statusCode,
24
        ];
25 32
        $body = json_encode($data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
26 32
        $response->getBody()->write((string) $body);
27
28
        return $response
29 32
            ->withStatus($statusCode)
30 32
            ->withHeader('Content-type', 'application/problem+json');
31
    }
32
33 32
    private function getStatusCode(\Exception $exception): int
34
    {
35 32
        $statusCode = 500;
36
        if (
37 32
            is_int($exception->getCode()) &&
38 32
            $exception->getCode() >= 400 &&
39 32
            $exception->getCode() <= 500
40
        ) {
41 32
            $statusCode = $exception->getCode();
42
        }
43
44 32
        return $statusCode;
45
    }
46
}
47