ErrorHandler::__invoke()   B
last analyzed

Complexity

Conditions 5
Paths 5

Size

Total Lines 28
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 14.4169

Importance

Changes 0
Metric Value
dl 0
loc 28
ccs 5
cts 18
cp 0.2778
rs 8.439
c 0
b 0
f 0
cc 5
eloc 17
nc 5
nop 1
crap 14.4169
1
<?php
2
3
namespace Flatdown;
4
5
use League\Plates\Engine as PlatesEngine;
6
use Middlewares\ErrorHandlerDefault;
7
use Middlewares\HttpErrorException;
8
use Middlewares\Utils;
9
use Psr\Http\Message\ResponseInterface;
10
use Psr\Http\Message\ServerRequestInterface;
11
12
class ErrorHandler extends ErrorHandlerDefault
13
{
14
    /**
15
     * @var PlatesEngine
16
     */
17
    private $templates;
18
19
    /**
20
     * @param PlatesEngine $templates
21
     */
22 15
    public function __construct(PlatesEngine $templates)
23
    {
24 15
        $this->templates = $templates;
25 15
    }
26
27
    /**
28
     * @param ServerRequestInterface $request
29
     * @return ResponseInterface
30
     */
31 3
    public function __invoke(ServerRequestInterface $request)
32
    {
33 3
        $error  = $request->getAttribute('error');
34 3
        $accept = $request->getHeaderLine('Accept');
35
36 3
        if ((stripos($accept, 'text/html') !== false) && ($error instanceof HttpErrorException)) {
37
            $code = $error->getCode();
38
            $view = 'errors/' . $code;
39
40
            if (!file_exists($this->templates->path($view))) {
41
                $view = 'errors/default';
42
            }
43
44
            if ($prev = $error->getPrevious()) {
45
                error_log('ERROR: ' . $prev->getMessage());
46
            } else {
47
                error_log('ERROR: ' . $error->getMessage());
48
            }
49
50
            $content  = $this->templates->render($view, ['error' => $error]);
51
            $response = Utils\Factory::createResponse($code);
52
            $response->getBody()->write($content);
53
54
            return $response;
55
        }
56
57 3
        return parent::__invoke($request);
58
    }
59
}
60