HttpException::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 3
ccs 0
cts 3
cp 0
rs 10
c 0
b 0
f 0
cc 1
eloc 1
nc 1
nop 1
crap 2
1
<?php
2
namespace Phrest\Middleware;
3
4
class HttpException implements \Interop\Http\ServerMiddleware\MiddlewareInterface
5
{
6
    /**
7
     * @var \Psr\Log\LoggerInterface
8
     */
9
    private $logger;
10
11
    public function __construct(\Psr\Log\LoggerInterface $logger)
12
    {
13
        $this->logger = $logger;
14
    }
15
16
    public function process(\Psr\Http\Message\ServerRequestInterface $request, \Interop\Http\ServerMiddleware\DelegateInterface $delegate)
17
    {
18
        try {
19
            $response = $delegate->process($request);
20
        } catch(\Phrest\Http\Exception $e) {
21
            $error = $e->error();
22
23
            $errorEntries = [];
24
            foreach($error->errors() as $errorEntry) {
25
                /** @var \Phrest\API\ErrorEntry $errorEntry */
26
                $errorEntries[] = [
27
                    'code' => $errorEntry->code(),
28
                    'message' => $errorEntry->message(),
29
                    'field' => $errorEntry->field(),
30
                    'constraint' => $errorEntry->constraint()
31
                ];
32
            }
33
34
            $response = new \Zend\Diactoros\Response\JsonResponse(
35
                [
36
                    'code' => $error->code(),
37
                    'message' => $error->message(),
38
                    'http' => [
39
                        'code' => $e->getCode(),
40
                        'message' => \Phrest\Http\StatusCodes::message($e->getCode()),
41
                    ],
42
                    'errors' => $errorEntries
43
                ],
44
                $e->getCode()
45
            );
46
47
            $this->logger->info('Exception: '.$e->getMessage(), [
48
                'exception' => get_class($e),
49
                'file' => $e->getFile(),
50
                'line' => $e->getLine(),
51
                'trace' => explode("\n", $e->getTraceAsString())
52
            ]);
53
        }
54
        return $response;
55
    }
56
}