Completed
Pull Request — master (#80)
by John
03:04
created

ExceptionListener   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 6
Bugs 0 Features 0
Metric Value
wmc 3
c 6
b 0
f 0
lcom 1
cbo 4
dl 0
loc 59
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 9 1
A setLogger() 0 6 1
A onKernelException() 0 11 1
1
<?php declare(strict_types = 1);
2
/*
3
 * This file is part of the KleijnWeb\SwaggerBundle package.
4
 *
5
 * For the full copyright and license information, please view the LICENSE
6
 * file that was distributed with this source code.
7
 */
8
9
namespace KleijnWeb\SwaggerBundle\EventListener;
10
11
use KleijnWeb\SwaggerBundle\Response\Error\HttpError;
12
use KleijnWeb\SwaggerBundle\Response\Error\LogRefBuilder;
13
use KleijnWeb\SwaggerBundle\Response\ErrorResponseFactory;
14
use Psr\Log\LoggerInterface;
15
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
16
17
/**
18
 * @author John Kleijn <[email protected]>
19
 */
20
class ExceptionListener
21
{
22
    /**
23
     * @var LoggerInterface
24
     */
25
    private $logger;
26
27
    /**
28
     * @var ErrorResponseFactory
29
     */
30
    private $errorResponseFactory;
31
32
    /**
33
     * @var LogRefBuilder
34
     */
35
    private $logRefBuilder;
36
37
    /**
38
     * @param ErrorResponseFactory $errorResponseFactory
39
     * @param LogRefBuilder        $logRefBuilder
40
     * @param LoggerInterface      $logger
41
     */
42
    public function __construct(
43
        ErrorResponseFactory $errorResponseFactory,
44
        LogRefBuilder $logRefBuilder,
45
        LoggerInterface $logger
46
    ) {
47
        $this->logger               = $logger;
48
        $this->errorResponseFactory = $errorResponseFactory;
49
        $this->logRefBuilder        = $logRefBuilder;
50
    }
51
52
    /**
53
     * @param LoggerInterface $logger
54
     *
55
     * @return $this
56
     */
57
    public function setLogger(LoggerInterface $logger)
58
    {
59
        $this->logger = $logger;
60
61
        return $this;
62
    }
63
64
    /**
65
     * @param GetResponseForExceptionEvent $event
66
     */
67
    public function onKernelException(GetResponseForExceptionEvent $event)
68
    {
69
        $error = new HttpError($event->getRequest(), $event->getException(), $this->logRefBuilder);
70
71
        $this->logger->log(
72
            $error->getSeverity(),
73
            "{$error->getMessage()} [logref {$error->getLogRef()}]: {$event->getException()}"
74
        );
75
76
        $event->setResponse($this->errorResponseFactory->create($error));
77
    }
78
}
79