Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 34 |
|
0.00% |
0 / 1 |
CRAP | |
0.00% |
0 / 1 |
ErrorHandler | |
0.00% |
0 / 34 |
|
0.00% |
0 / 1 |
132 | |
0.00% |
0 / 1 |
__invoke | |
0.00% |
0 / 34 |
|
0.00% |
0 / 1 |
132 |
1 | <?php |
2 | |
3 | namespace BO\Zmsapi\Helper; |
4 | |
5 | use BO\Slim\Render; |
6 | use Psr\Http\Message\ResponseInterface; |
7 | use Psr\Http\Message\ServerRequestInterface; |
8 | use Slim\Interfaces\ErrorHandlerInterface; |
9 | |
10 | /** |
11 | * |
12 | * @SuppressWarnings(CouplingBetweenObjects) |
13 | */ |
14 | class ErrorHandler implements ErrorHandlerInterface |
15 | { |
16 | /** |
17 | * @SuppressWarnings("PMD.UnusedFormalParameter") |
18 | * @SuppressWarnings(Complexity) |
19 | * @param ServerRequestInterface $request |
20 | * @param \Throwable $exception |
21 | * @param bool $displayErrorDetails |
22 | * @param bool $logErrors |
23 | * @param bool $logErrorDetails |
24 | * @return ResponseInterface |
25 | */ |
26 | public function __invoke( |
27 | ServerRequestInterface $request, |
28 | \Throwable $exception, |
29 | bool $displayErrorDetails, |
30 | bool $logErrors, |
31 | bool $logErrorDetails |
32 | ): ResponseInterface { |
33 | $response = \App::$slim->getResponseFactory()->createResponse(); |
34 | if ($exception instanceof \Slim\Exception\HttpNotFoundException) { |
35 | $message = \BO\Zmsapi\Response\Message::create($request); |
36 | $message->meta->error = true; |
37 | $message->meta->message = "Could not find a resource with the given URL " . $request->getUri()->getPath(); |
38 | $response = \BO\Slim\Render::withLastModified($response, time(), '0'); |
39 | return Render::withJson($response, $message, 404); |
40 | } |
41 | |
42 | $message = \BO\Zmsapi\Response\Message::create($request); |
43 | $message->meta->error = true; |
44 | $message->meta->message = $exception->getMessage(); |
45 | $message->meta->exception = get_class($exception); |
46 | $message->meta->trace = ''; |
47 | foreach (array_slice($exception->getTrace(), 0, 10) as $call) { |
48 | $message->meta->trace .= "\\"; |
49 | $message->meta->trace .= isset($call['class']) ? $call['class'] : ''; |
50 | $message->meta->trace .= "::"; |
51 | $message->meta->trace .= isset($call['function']) ? $call['function'] : ''; |
52 | $message->meta->trace .= " +"; |
53 | $message->meta->trace .= isset($call['line']) ? $call['line'] : ''; |
54 | $message->meta->trace .= "\n"; |
55 | } |
56 | if (isset($exception->data)) { |
57 | $message->data = $exception->data; |
58 | } |
59 | $response = \BO\Slim\Render::withLastModified($response, time(), '0'); |
60 | $status = 500; |
61 | if ($exception->getCode() >= 200 && $exception->getCode() <= 599) { |
62 | $status = $exception->getcode(); |
63 | } |
64 | if ($exception->getCode() >= 500 || !$exception->getCode()) { |
65 | \App::$log->critical( |
66 | "[API] Fatal Exception: " |
67 | . " in " . $exception->getFile() . " +" . $exception->getLine() |
68 | . " -> " . $exception->getMessage() |
69 | . " | Trace: " . preg_replace("#(\s)+#", ' ', str_replace('\\', ':', $message->meta->trace)) |
70 | ); |
71 | } |
72 | return Render::withJson($response, $message, $status); |
73 | } |
74 | } |